(function(){ var // Will speed up references to window, and allows munging its name. window = this, // Will speed up references to undefined, and allows munging its name. undefined, // Map over jQuery in case of overwrite _jQuery = window.jQuery, // Map over the $ in case of overwrite _$ = window.$, jQuery = window.jQuery = window.$ = function( selector, context ) { // The jQuery object is actually just the init constructor 'enhanced' return new jQuery.fn.init( selector, context ); },..............
jQuery源码中,var window=this ,注释中注明了代码的主要作用是提高效率。
这里有两个问题:
1)函数体中的this是什么值?
2)效率是怎么提升的?
1、要了解第一个问题很容易,在程序中打出this的值,发现打印出来this的结果是[object DOMWindow]。也就是这里的局部变量被赋值为的window对象的引用。函数中this的引用到底指向谁?
关于this,推荐一篇博文:http://www.cnblogs.com/ruxpinsp1/archive/2008/04/20/1162463.html
2、要理解怎么提高效率,首先要了解在javascript中不存在“块级作用域”,变量求值都是通过“作用域链”来进行的。我们常常提到的闭包也是由作用域链为基础的。
关于块级作用域用一下代码说明:
function doSomething(){ var a=1; for(var i=0;i<10;i++){ a++; } alert(a); alert("循环块中的变量i:"+i); }
在java类似的语言中,i的作用域只限于for循环体内。而js里面,i的作用域在整个函数体。不存在块级的作用域。这里作者利用了减少作用域链的长度,减少查找,来提高效率。