JavaScript中任何库与框架设计的第一个要点就是解决命名空间与变量污染的问题。jQuery就是利用了JavaScript函数做用域的特性,采用自执行函数包裹了自身的方法来解决这个问题。从jQuery不一样的版本中能够看出它的自执行函数有以下两种写法:框架
1 // 写法一 2 (function(window, factory) { 3 factory(window) 4 }(this, function() { 5 return function() { 6 //jQuery的调用 7 } 8 })); // 其实写法一能够当作是(function() {}()); 9 10 // 写法二 11 (function(window, undefined) { 12 var jQuery = function() {} 13 // ... 14 window.jQuery = window.$ = jQuery; 15 })(window); // 而写法而能够当作是(function() {})();
采用这种写法的意义
JavaScript中没有私有做用域的概念,若是在多人开发的项目上,你在全局或局部做用域中声明了一些变量,可能会被其余人不当心用同名的变量给覆盖掉。根据JavaScript函数做用域链的特性,能够使用这种技术模仿一个私有做用域,把匿名函数做为一个“容器”,内部能够访问外部的变量,而外部环境不能访问内部。从而达到保护jQuery内部变量的做用。函数