当在另一个方法内部调用时,函数返回空数组而不是参数对象

时间:2017-08-01 17:33:22

标签: javascript

这是我发明的一个简单函数,用于测试JavaScript的argument对象与休息参数。

function f(a, b, ...theArgs) { 
  console.log(theArgs); 
  console.log(arguments); 
  return arguments;
}

如果我调用此函数,请使用以下参数:f(1,2,6,5,8,9,10,'a') 我将获得两个控制台日志,然后返回参数对象。太棒了。

但是,如果我将此功能传递给: Array.prototype.slice(f(1,2,6,5,8,9,10,'a'), f.length),我将得到一个空数组,而不是像[6,5,8,9,10,'a']这样的数组 - 在这种情况下,我的函数似乎返回一个空数组而不是arguments对象。

为什么?这是我的控制台的快照:

enter image description here

1 个答案:

答案 0 :(得分:1)

Array.prototype是您的代码正在切片的空数组,而不是f的结果。

slice的第一个参数必须是数字。在您的代码中,f返回一个对象。如果您想要更改this函数的slice值,以便它切换对象,请使用.call

Array.prototype.slice.call(f(1, 2, 6, 5, 8, 9, 10, 'a'), f.length)

function f(a, b, ...theArgs) {
  //console.log(theArgs);
  //console.log(arguments);
  return arguments;
}

console.log(Array.prototype.slice.call(f(1, 2, 6, 5, 8, 9, 10, 'a'), f.length));