js學習筆記34----自執行函數
阿新 • • 發佈:2018-06-03
函數作用域 span 括號 pre 根據 函數返回值 -- 作用域鏈 同名
自執行函數的寫法通常如下:
方式1:
(function(){ *** 寫事件處理代碼 *** }())
方式2:
(function(){ *** 寫事件處理代碼 *** })()
方式3:
!(function(){ *** 寫事件處理代碼 *** })()
在function前面加!、+、-、=都可以將函數聲明轉化為函數表達式,消除了js引擎識別函數聲明和函數表達式的歧義,加()是最安全的方法,免得其他的和函數返回值進行運算。
自執行函數傳參時,參數賦值直接在後面的括號裏面:
(function(arg){ console.log(arg); //輸出1 }(1))
不過這樣的寫法有什麽用呢?
javascript中沒用私有作用域的概念,如果在多人開發的項目上,你在全局或局部作用域中聲明了一些變量,可能會被其他人不小心用同名的變量給覆蓋掉,根據javascript函數作用域鏈的特性,可以使用這種技術可以模仿一個私有作用域,用匿名函數作為一個“容器”,“容器”內部可以訪問外部的變量,而外部環境不能訪問“容器”內部的變量,所以( function(){…} )()內部定義的變量不會和外部的變量發生沖突,俗稱“匿名包裹器”或“命名空間”。
js學習筆記34----自執行函數