2012-08-10 6 views
1

나는 John Resig의 책 "Secrets of the JavaScript Ninja"를 읽고 있는데이 코드를 사용하여 객체의 프로토 타입을 확장하여 언어의 향후 기능을 예측하는 방법을 설명합니다.이 자바 스크립트 코드의 결과

if(!Array.prototype.forEach){ 
    Array.prototype.forEach = function(fn, callback){ 
     for(var i = 0; i < this.length; i++){ 
     fn.call(callback || null, this[i], i, this); 
     } 
    }; 
} 

"callback || null"문은 정의되지 않은 값을 "call"함수에 전달하지 못하도록합니다. 내가 이해할 수없는 것은 "fn"매개 변수의 컨텍스트로 null을 전달할 때 발생할 수있는 결과입니다. 코드가 충돌하지 않을까요?

제공 할 수있는 설명 및/또는 계몽에 감사드립니다.

+1

'callback'은 설명적인 변수 이름이 아닙니다. 'fn'은 실제로 여기에있는 콜백이고'callback'은'this' 값 ... – pimvdb

+1

보통'scope'라는 이름은'callback'이 사용되는 곳에서 사용됩니다. '콜백 (callback) '은 나에게 기능을 함축한다. –

+0

'this_obj'는이 매개 변수의 더 나은 이름입니다. –

답변

1

, 문맥은 "이"null를 그냥 같다 . 컨텍스트에 적절한 값이없는 경우 .call() 또는 .apply()를 사용할 때 일반적인 방법입니다.

1

Function.call의 첫 번째 매개 변수는 함수를 실행할 범위입니다. 해당 매개 변수가 false 일 경우 (null은 falsey의 한 형태입니다) 그러면 전역 범위에서 해당 함수가 실행됩니다. 브라우저에서는 thiswindow으로 설정되어 실행됩니다.

undefined을 범위로 전달하면 callback || null은 필요하지 않으며 window을 사용합니다. Resig가 왜 그렇게했는지 설명 할 수있는 브라우저 나 상황이있을 수 있습니다.

+1

범위는 – Esailija

+0

에 대해 사용하는 것보다 [완전히 다른] (https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Functions_and_function_scope) 무언가를 의미합니다. 불행하게도 '범위'라는 용어는 매우 진흙 투성이가되었습니다. 자바 스크립트 세계. 많은 사람들, 프레임 워크, 라이브러리 등은 "범위"라는 말을 사용하여 함수를 호출 할 때 "this'의 대상을 의미합니다." –

+0

주위를 둘러 보았을 때 가장 좋아하는 이름은'context'입니다. .js가 사용합니다. –

관련 문제