我有一个功能
function callback(obj){...}
是否可以传入比函数签名中声明的更多的对象? 例如这样称呼它:
callback(theObject, extraParam);
我在Firefox上尝试过它并没有出现问题,但是这样做不好吗?
答案 0 :(得分:34)
JavaScript允许这样做,你可以将任意数量的参数传递给函数。
它们可以在arguments
对象中访问,该对象是一个类似数组的对象,其数字属性包含调用函数时使用的参数值,length
属性告诉您调用也使用了多少个参数,以及一个callee
属性,它是对函数本身的引用,例如你可以写:
function sum(/*arg1, arg2, ... , argN */) { // no arguments defined
var i, result = 0;
for (i = 0; i < arguments.length; i++) {
result += arguments[i];
}
return result;
}
sum(1, 2, 3, 4); // 10
arguments
对象可能看起来像一个数组,但它是一个普通的对象,它继承自Object.prototype
,但是如果你想在它上面使用Array方法,你可以直接从它调用它们。 Array.prototype
,例如,获取实数组的常见模式是使用数组slice
方法:
function test () {
var args = Array.prototype.slice.call(arguments);
return args.join(" ");
}
test("hello", "world"); // "hello world"
此外,您可以使用函数对象的length
属性知道函数期望的参数数量:
function test (one, two, three) {
// ...
}
test.length; // 3
答案 1 :(得分:2)
是的 - 这是一个很好的做法,是一个强大的JavaScript功能