0

我正在阅读来自 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);

我知道我误解了一些东西,但是什么?:)

提前致谢!

4

2 回答 2

4

如果参数是this这种情况

...它是

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

正确的。

于 2013-02-22T22:14:26.233 回答
1

slice不带参数调用时返回整个数组的副本

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

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

于 2013-02-22T22:17:59.463 回答