1. 程式人生 > >js學習筆記34----自執行函數

js學習筆記34----自執行函數

函數作用域 span 括號 pre 根據 函數返回值 -- 作用域鏈 同名

自執行函數的寫法通常如下:

方式1:

(function(){
    ***
    寫事件處理代碼
    ***
}())

方式2:

(function(){
    ***
    寫事件處理代碼
    ***
})()

方式3:

!(function(){
    ***
    寫事件處理代碼
    ***
})()

在function前面加!、+、-、=都可以將函數聲明轉化為函數表達式,消除了js引擎識別函數聲明和函數表達式的歧義,加()是最安全的方法,免得其他的和函數返回值進行運算。

自執行函數傳參時,參數賦值直接在後面的括號裏面:

(function
(arg){ console.log(arg); //輸出1 }(1))

不過這樣的寫法有什麽用呢?

javascript中沒用私有作用域的概念,如果在多人開發的項目上,你在全局或局部作用域中聲明了一些變量,可能會被其他人不小心用同名的變量給覆蓋掉,根據javascript函數作用域鏈的特性,可以使用這種技術可以模仿一個私有作用域,用匿名函數作為一個“容器”,“容器”內部可以訪問外部的變量,而外部環境不能訪問“容器”內部的變量,所以( function(){…} )()內部定義的變量不會和外部的變量發生沖突,俗稱“匿名包裹器”或“命名空間”。

js學習筆記34----自執行函數