我正在從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