JavaScript variable number of arguments to function

  1. Home
  2. javascript
  3. JavaScript variable number of arguments to function

Is there a way to allow “unlimited” vars for a function in JavaScript?

Example:

load(var1, var2, var3, var4, var5, etc...)
load(var1)

First answer

Sure, just use the arguments object.

function foo() {
  for (var i = 0; i < arguments.length; i++) {
    console.log(arguments[i]);
  }
}

Second answer

Another option is to pass in your arguments in a context object.

function load(context)
{
    // do whatever with context.name, context.address, etc
}

and use it like this

load({name:'Ken',address:'secret',unused:true})

This has the advantage that you can add as many named arguments as you want, and the function can use them (or not) as it sees fit.

Third answer

I agree with Ken’s answer as being the most dynamic and I like to take it a step further. If it’s a function that you call multiple times with different arguments – I use Ken’s design but then add default values:

function load(context) {

    var defaults = {
        parameter1: defaultValue1,
        parameter2: defaultValue2,
        ...
    };

    var context = extend(defaults, context);

    // do stuff
}

This way, if you have many parameters but don’t necessarily need to set them with each call to the function, you can simply specify the non-defaults. For the extend method, you can use jQuery’s extend method ($.extend()), craft your own or use the following:

function extend() {
    for (var i = 1; i < arguments.length; i++)
        for (var key in arguments[i])
            if (arguments[i].hasOwnProperty(key))
                arguments[0][key] = arguments[i][key];
    return arguments[0];
}

This will merge the context object with the defaults and fill in any undefined values in your object with the defaults.

Reprint:https://stackoverflow.com/questions/2141520/javascript-variable-number-of-arguments-to-function
Spread the love

Related articles

Comments are closed.