有一个奇怪的情况,javascript参数对象被严重依赖。我已经解决了这个问题,但是想知道是否有人可以向我解释这段代码产生的一些行为:
function whatweget(arg1,arg2,arg3) {
while(arguments.length<3) { arguments[arguments.length++] = undefined; }
console.log(arguments);
}
function argstest() {
arguments[arguments.length++] = 3;
console.log(arguments);
}
whatweget(1,2);
whatweget(1,2,3);
whatweget(1,2,3,4);
argstest(3);
Chrome中的输出:
[1, 2, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined]
[1, 2, 3]
[1, 2, 3, 4]
[3, 3]
在whatweget console.log中检查arguments对象显示它有20个项目,前3个是粗体,而后17个稍微褪色。检查argstest console.log中的参数这些'ghost'参数不会显示。这不是问题,因为后续脚本将被传递'arguments'并使用正确设置的'length'参数,但是想知道是否有人对这种行为有任何见解?
哦,顺便说一下,Firefox 8对这种行为非常酷。除了没有在Watch检查器中显示arguments对象外,它会按预期执行所有操作,但是当您将鼠标悬停在它上面时它会将其显示为数组。糟糕的火狐,糟糕的火狐。