2013-01-10 3 views
3

나는 HTML5ROCKS에서이 코드를 확인했다 : http://www.html5rocks.com/static/demos/parallax/demo-1a/scripts/parallax.jsdocument.querySelector.bind (document)의 의미는 무엇입니까?

을 그리고 그들이 querySelector에 문서를 제본 그들은 왜

(function(win, d) { 

    var $ = d.querySelector.bind(d); 

    .... 

    var mainBG = $('section#content'); 

    .... 

})(window, document); 

를 사용하는 것을 알 수 있습니다. 이미 문서에 범위가 설정되어 있지 않습니까?

+0

[이 답변] (http://stackoverflow.com/questions/13383886/making-a-short-alias-for-document-queryselectorall) 자세한 설명이 있습니다. 짧은 대답 : querySelectorAll()이 문서 컨텍스트에서 호출되어야하므로 JavaScript 인터프리터에서 오류가 발생합니다. –

답변

3

아니요, the function은 특정 문서에 바인딩되지 않습니다 (window.document이 아닌 다른 문서도있을 수 있음). 시도하지 않고 WRONG_THIS_ERR 예외가 발생합니다. Document interface을 구현하는 객체에이를 적용해야합니다.

MDN's introduction to the this keyword에서 함수 호출의 thisVal ("컨텍스트")이 어떻게 결정되는지 살펴보십시오.

+0

감사합니다. 브라우저에서 "엄격 모드"가 아닌 것으로 가정하고 함수를 만듭니다. 'function a() { console.log (this); }' 우리는 'A()를 호출 할 경우,' 콘솔 인쇄'window'합니다. 그러나 장면'this.a(); 뒤에 javascript 앞에 'this.'가 붙어 있습니다. 이것은 창 컨텍스트입니다. 같은 이유로 우리가 새로운 객체'var o = {}; '를 만들고'o.a = a;'메소드를 할당하고'o.a();'를 실행하면 콘솔이 객체를 출력합니다. 나는 그것이 적절한 설명이 아닐 수도 있지만, 자바 스크립트 에서이 "컨텍스트"는 언젠가는 너트를 몰고있다. –