jQuery的立即调用表达式
立即调用表达式
任何库与框架设计的第一要要点就是解决命名空间与变量污染的问题。jquery就是用javascript函数作用域的特性,采用立即调用表达式包裹了自身的方法来解决这个问题的。
jQuery的立即调用表达式的写法有三种:
写法一:
(function(window,factory){ factory(window); }(this,function(){ return function(){ //jQuery的调用 } }));
可以看出上面代码中嵌套了2个函数,而且把一个函数作为参数传递到另一个函数中并且执行,这种方法有点复杂,我们简化一下写法:
写法二:
var factory = function(){ return function(){ //执行方法 } } var jQuery = factory();
上面的代码和方法1是等同的,但是factoty有点变成了简单的工厂模式,需要自己调用,不像是一个单例的jQuery类,所以我们需要改成“自执行”,而不是另外调用。
写法三:
(function(window,undefined){ var jQuery = function(){}; //.... window.jQuery = window.$ = jQuery; })(window);
从上面代码可以看出,自动初始化这个函数,让其只构建一次。详细说一下这种写法的优势:
1. window和undefied都是为了减少变量查找所经过的作用于(scope),当window传递给闭包内部之后,在必报内部使用它的时候,就可以把它当做一个局部变量,显然比原先在window作用于子啊查找的时候要快一些。
2. undefined也是同样的道理,其实这个undefined并不是JavaScript数据类型的undefined,而是一个普普通通的变量名。只因为没给它传递值,它的值就是undefined。