2013-01-10 116 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中的这个“背景”有时会让我疯狂。 –