Visit Mozilla.org

Core JavaScript 1.5 Reference:Functions:arguments

From MDC


Contents

[edit] Summary

An array-like object corresponding to the arguments passed to a function.

Local variable within all functions and deprecated property of Function
Implemented in: JavaScript 1.1, NES 2.0

JavaScript 1.2: added arguments.callee property.

JavaScript 1.3: deprecated arguments.caller property; removed support for argument names and local variable names as properties of the arguments object.

JavaScript 1.4: deprecated arguments, arguments.callee, and arguments.length as properties of Function; retained arguments as a local variable of a function and arguments.callee and arguments.length as properties of this variable.

ECMA Version: ECMA-262

[edit] Description

The arguments object is a local variable available within all functions; arguments as a property of Function can no longer be used.

You can refer to a function's arguments within the function by using the arguments object. This object contains an entry for each argument passed to the function, the first entry's index starting at 0. For example, if a function is passed three arguments, you can refer to the argument as follows:

arguments[0]
arguments[1]
arguments[2]

The arguments can also be set:

arguments[1] = 'new value';
Note: The SpiderMonkey JavaScript engine has a bug in which arguments[n] cannot be set if n is greater than the number of formal or actual parameters. This has been fixed in the engine for JavaScript 1.6.

The arguments object is not an array. It is similar to an array, but does not have any array properties except length. For example, it does not have the pop method. However it can be converted to an real array:

 var args = Array.prototype.slice.call(arguments);

The arguments object is available only within a function body. Attempting to access the arguments object outside a function declaration results in an error.

You can use the arguments object if you call a function with more arguments than it is formally declared to accept. This technique is useful for functions that can be passed a variable number of arguments. You can use arguments.length to determine the number of arguments passed to the function, and then process each argument by using the arguments object. (To determine the number of arguments declared when a function was defined, use the Function.length property.)

[edit] Properties

arguments.callee: Specifies the function body of the currently executing function.

arguments.caller Deprecated : Specifies the name of the function that invoked the currently executing function.

arguments.length: Specifies the number of arguments passed to the function.

[edit] Backward compatibility

[edit] JavaScript 1.3 and earlier versions

In addition to being available as a local variable, the arguments object is also a property of the Function object and can be preceded by the function name. For example, if a function myFunc is passed three arguments named arg1, arg2, and arg3, you can refer to the arguments as follows:

myFunc.arguments[0]
myFunc.arguments[1]
myFunc.arguments[2] 

[edit] JavaScript 1.1 and 1.2

The following features, which were available in JavaScript 1.1 and JavaScript 1.2, have been removed:

  • Each local variable of a function is a property of the arguments object. For example, if a function myFunc has a local variable named myLocalVar, you can refer to the variable as arguments.myLocalVar.
  • Each formal argument of a function is a property of the arguments object. For example, if a function myFunc has two arguments named arg1 and arg2, you can refer to the arguments as arguments.arg1 and arguments.arg2. (You can also refer to them as arguments[0] and arguments[1].)

[edit] Examples

[edit] Example: Defining function that concatenates several strings

This example defines a function that concatenates several strings. The only formal argument for the function is a string that specifies the characters that separate the items to concatenate. The function is defined as follows:

function myConcat(separator) {
  var result = "";

  // iterate through non-separator arguments
  for (var i = 1; i < arguments.length; i++)
    result += arguments[i] + separator;

  return result;
}

You can pass any number of arguments to this function, and it creates a list using each argument as an item in the list.

// returns "red, orange, blue, "
myConcat(", ", "red", "orange", "blue");

// returns "elephant; giraffe; lion; cheetah; "
myConcat("; ", "elephant", "giraffe", "lion", "cheetah");

// returns "sage. basil. oregano. pepper. parsley. "
myConcat(". ", "sage", "basil", "oregano", "pepper", "parsley");

[edit] Example: Defining a function that creates HTML lists

This example defines a function that creates a string containing HTML for a list. The only formal argument for the function is a string that is "u" if the list is to be unordered (bulleted), or "o" if the list is to be ordered (numbered). The function is defined as follows:

function list(type) {
  var result = "<" + type + "l>";

  // iterate through non-type arguments
  for (var i = 1; i < arguments.length; i++)
    result += "<li>" + arguments[i] + "</li>";

  result += "</" + type + "l>"; // end list

  return result;
}

You can pass any number of arguments to this function, and it adds each argument as an item to a list of the type indicated. For example:

var listHTML = list("u", "One", "Two", "Three");
// listHTML is "<ul><li>One</li><li>Two</li><li>Three</li></ul>"