2013-01-10 92 views
3

我檢查從HTML5ROCKS驗證碼: http://www.html5rocks.com/static/demos/parallax/demo-1a/scripts/parallax.jsdocument.querySelector.bind(document)是什麼意思;

,並注意到他們使用

(function(win, d) { 

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

    .... 

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

    .... 

})(window, document); 

爲什麼它們連接的文件到querySelector。它不是已經限定在文檔中嗎?

+0

[本答案](http://stackoverflow.com/questions/13383886/making-a-short-alias-for-document-queryselectorall)具有進一步的解釋。簡短回答:JavaScript解釋器拋出錯誤,因爲應在文檔上下文中調用querySelectorAll()。 –

回答

3

不,the function沒有綁定到一個特定的文件(可能有其他的,不只是window.document)。嘗試一下,你會得到一個異常 - 你需要將它應用到一個實現Document interface的對象上。

另請參見MDN's introduction to the this keyword,瞭解如何確定函數調用的thisVal(「上下文」)。

+0

謝謝。我們假設我們不是在「嚴格模式」下,在瀏覽器中,我們創建一個函數: 'function a(){console.log(this); }' 如果我們打電話給 'a();' 控制檯打印'窗口'。但是它就像是在場景後面加上'this.'這個'this.a();'這是窗口上下文。出於同樣的原因,如果我們創建一個新對象'var o = {};'並且我們分配一個方法'o.a = a;'並且運行'o.a();'控制檯打印o對象。我知道這可能不是正確的解釋,但是JavaScript中的這個「背景」有時會讓我瘋狂。 –