[英]Javascript 'arguments' Keyword
我的理解是,我可以调用Array.prototype.slice.call(arguments, 1)
返回数组的尾部。
为什么此代码不返回[2,3,4,5]
?
function foo() {
return Array.prototype.slice.call(arguments,1);
}
alert(foo([1,2,3,4,5]));
arguments
是一个类似数组的对象,列出了参数和其他一些属性(例如,对arguments.callee
当前函数的arguments.callee
)。
在这种情况下,您的arguments
对象看起来像这样:
arguments {
0: [1,2,3,4,5],
length: 1,
other properties here
}
我认为这可以很好地说明您的行为。 尝试在函数调用中删除数组括号,或使用arguments[0]
访问arry。
因为您只传递一个参数-数组。
尝试alert(foo(1,2,3,4,5));
参数在JavaScript中从0开始编号,因此,当您从1开始切片并传递1参数时,您一无所获。
请注意,它可能妨碍优化以允许arguments
对象从函数中“泄漏”出去。 由于arguments
和形式参数之间存在混叠,因此如果arguments
对象被发送到其他地方,优化器实际上就无法对函数进行任何静态分析,因为它不知道参数变量会发生什么。
因为arguments
是{0: [1,2,3,4,5], length: 1}
,所以它是一个带有一个元素的类似数组的对象。 具有一个元素的数组的尾部为空数组。
更改函数的定义:
function foo(arr) {
return Array.prototype.slice.call(arr,1);
}
或使用以下命令调用该函数:
foo(1,2,3,4,5);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.