0
function list() {
  return Array.prototype.slice.call(arguments, 0); //Here is my problem
}

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

我在网上找到了这个使用 slice 函数的示例,并且希望了解 call() 函数如何能够访问通过使用“arguments”属性传递给列表的每个项目。

我不明白将单个“参数”属性作为函数上下文传递给 slice() 的工作原理。我是否错过了某处正在进行的递归?

4

1 回答 1

1

该函数将提供的参数对象转换为数组。

当调用函数的 call 方法时,函数内的this被设置为提供的对象。另一种称呼方式是:

[].slice.call(arguments);

所以在 slice 方法中,不是表达式开头的 empyt 数组,而是arguments对象。

如果传递的对象不是本机对象(例如,像 NodeList 或类似的 DOM 对象),这不是一个好主意,因为它在某些正在使用的浏览器上会失败。此外,不是“上下文”,它只是函数执行上下文的一个参数。

于 2013-10-14T01:11:06.740 回答