理解在函数参数中使用slice

时间:2013-02-22 22:12:02

标签: javascript

我正在从mozilla开发者网络上阅读这段代码:

function list() {
  return Array.prototype.slice.call(arguments);
}

var list1 = list(1, 2, 3); // [1, 2, 3]

函数内部的行混淆了我,为什么我可以使用call而不指定一个对象作为this

如果argumentsthis就是这种情况,那么我没有将任何参数传递给slice函数,对吧?

如果我把一些随机元素作为this我得到一个空数组,如下所示:

return Array.prototype.slice.call([], arguments);

我知道我误解了什么,但是什么? :)

提前致谢!

2 个答案:

答案 0 :(得分:4)

  

如果参数是this就是这种情况

......它是

  

然后我没有将任何参数传递给切片函数,对吗?

正确。

答案 1 :(得分:1)

slice在没有参数调用时返回整个数组的副本

> x = [1, 2, 3]
> x.slice()
[1, 2, 3]
> x.slice() == x
false

在您的示例中,这样做是为了将arguments伪数组转换为真实数组。