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內部變量的做用。函數