무료 코드 캠프의 연습 "Seek and Destroy"을 진행하고 있습니다. 배열 인 첫 번째 인수 뒤의 인수는 배열에서 필터링해야합니다. JS 빈에하위 함수의 arguments 객체 (크롬 콘솔에서 작동하지만 다른 곳에서는 작동하지 않음)
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]
하고 그대로 아무것도하지 않는 다른 장소 :
나는이 크롬 콘솔에서 작동 코드를 함께했다. 오직 return 대신 새로운 배열로 console.log를 사용하는 경우에만 작동합니다. 무료 코드 캠프에서 실행하면 다음과 같은 메시지가 나타납니다.TypeError: 'caller' and 'arguments' are restricted function properties and cannot be accessed in this context.
나는 엄격 모드와 관련이 있다는 사실을 발견했습니다. 그러나 그것이 실제로 의미하는 것은 무엇입니까? 부모 함수의 arguments 객체를 하위 함수 내에서 사용할 수 없다는 말입니까?
인수를 먼저 배열로 변환 한 다음 해당 배열을 하위 함수로 사용하면 어디에서나 사용할 수 있습니다. 그러나 나는 왜 자식 함수에서 인수가 크롬 콘솔에서 작동하지만 다른 곳에서는 작동하지 않는지, 그리고 자식 함수에서 인수 객체를 사용하는 방법이 있는지 궁금합니다.
콘솔에서 작동하는 이유에 대한 질문에 대답하지 않지만 내부 함수를 ES6 화살표 함수로 만들면 외부 함수 인'https : // jsfiddle '의'arguments' 객체에 액세스 할 수 있습니다. net/aa66x552 /, ES6 구문을 사용하려고한다면 rest 매개 변수 대신 https://jsfiddle.net/aa66x552/1/를 사용하여'arguments '를 피할 수 있습니다. 또는'function destroyer (arr, ... vals) {return arr.filter (x => vals.indexOf (x) === -1); }'. – nnnnnn