我正在从Free Code Camp开始练习“Seek and Destroy”。第一个数组之后的任何参数都应该从数组中过滤掉。参数对象在子功能中(在Chrome控制台上工作,但不在其他地方)
我想出了这个代码,铬控制台上工作:
function destroyer(arr) {
return arr.filter(function(x){
for(var i = 1; i < destroyer.arguments.length; i++){
if(x == destroyer.arguments[i]) {return false;}
}
return true;
});
}
destroyer([1, 2, 3, 1, 2, 3], 2, 3); //should return [1, 1]
在JS斌和其他地方,因为它是它没有做任何事情。只有当我用一个新的数组而不是仅返回console.log时,它将工作。当我在Free Code Camp中运行它时,我得到:
TypeError: 'caller' and 'arguments' are restricted function properties and cannot be accessed in this context.
我发现这可能与严格模式有关。但它实际上意味着什么?这是说我不能在子函数中使用父函数的参数对象吗?
如果我首先将参数转换为数组,然后在子函数中使用该数组,我可以使它在任何地方都能工作。但我很好奇为什么在子控件中的参数在chrome控制台中有效,但在别处没有,以及是否有方法在子函数中使用arguments对象。
不回答你为什么在控制台中工作的问题,但是请注意,如果你使内部函数成为ES6箭头函数,那么它可以访问外部函数的'arguments'对象:https:// jsfiddle。 net/aa66x552 /,但是如果你打算使用ES6语法,你可以通过使用rest参数来完全避免使用'arguments':https://jsfiddle.net/aa66x552/1/ - 或者甚至是:'''''''''''''驱动程序(arr, ... vals){return arr.filter(x => vals.indexOf(x)=== -1); }'。 – nnnnnn