我正在从mozilla开发者网络上阅读这段代码:
function list() {
return Array.prototype.slice.call(arguments);
}
var list1 = list(1, 2, 3); // [1, 2, 3]
函数内部的行混淆了我,为什么我可以使用call
而不指定一个对象作为this
?
如果arguments
是this
就是这种情况,那么我没有将任何参数传递给slice
函数,对吧?
如果我把一些随机元素作为this
我得到一个空数组,如下所示:
return Array.prototype.slice.call([], arguments);
我知道我误解了什么,但是什么? :)
提前致谢!
答案 0 :(得分:4)
如果参数是
this
就是这种情况
......它是
然后我没有将任何参数传递给切片函数,对吗?
正确。
答案 1 :(得分:1)
slice
在没有参数调用时返回整个数组的副本
> x = [1, 2, 3]
> x.slice()
[1, 2, 3]
> x.slice() == x
false
在您的示例中,这样做是为了将arguments
伪数组转换为真实数组。