(function(){ ... }())
(function(){ ... })()
// 只不過是把函數的引用調用換成了函數本身的調用,然后告訴Javascript引擎,圓括號前面的是函數表達式,而不是申明。
避免Uncaught SyntaxError: Unexpected token var fn = function(){ ... } fn()
以上兩種方式是函數自執行的常見方式
JavaScript 立即(自)執行函數:
javascript 里沒有私有作用域的概念,在大型項目里,函數或變量很容易被不小心覆蓋掉,依據JS里作用域鏈(函數外部不能訪問函數內部的變量,函數內部的子函數可以訪問父級作用域的所有變量)的特性。用匿名函數作為一個“容器”,“容器”內部可以訪問外部的變量,而外部環境不能訪問“容器”內部的變量,所以 (function(){ ... })() 內部定義的變量不會和外部的變量發生沖突,俗稱“匿名包裹器”或“命名空間”。
jQuery 使用的就是這種方法,將 jQuery 代碼包裹在 (function(window,undefined){ ...jquery代碼...})(window) 中,在全局作用域中調用 jQuery 代碼時,可以達到保護 jQuery 內部變量的作用
匿名函數:使用 function 關鍵字聲明一個函數,但未給函數命名,所以叫匿名函數,匿名函數屬於函數表達式,匿名函數有很多作用,賦予一個變量則創建函數,賦予一個事件則成為事件處理程序或創建閉包
IIFE好處:
一是不必為函數命名,避免了污染全局變量
二是IIFE內部形成了一個單獨的作用域,可以封裝一些外部無法讀取的私有變量
參考鏈接:https://www.jb51.net/article/127527.htm
https://www.cnblogs.com/TomXu/archive/2011/12/31/2289423.html
