繁体   English   中英

Javascript“参数”关键字

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM