函式表示式 和函式宣告function的區別

2021-08-28 02:58:15 字數 898 閱讀 2577

()()表示立即執行乙個函式表示式,拆分來看第乙個括號裡的是乙個函式宣告,第二個括號表示立即執行這個表示式,下面我們來理解一下什麼是函式表示式和函式宣告。

區分函式表示式和函式宣告的區別在於function的位置,如果function不是出現在一段函式的第乙個詞,那麼這是乙個函式表示式,若function是第乙個詞,則是乙個函式宣告。函式宣告和函式表示式的區別有哪些呢?我們來看下面這一段**:

var a = 2;

function test()

test();

console.log(a); //2

這段**宣告了乙個乙個test函式,在下面用test()呼叫了它,並且在函式內宣告的a變數也沒有汙染全域性變數,但是這裡還是有兩個問題,首先我們必須宣告乙個test函式,這個test名稱本身就汙染了全域性變數,然後我們還需要顯式的呼叫test。我想,如果函式不需要函式名(至少函式名不去汙染全域性作用域),並且能夠自動執行,這樣會更加理想。

js中提供了能同時解決這兩個問題的方法,那就是使用函式表示式()(),前面的()用來包裹函式,後面的()用來執行函式,我們來看示例**:

var a = 2;

(function test())()

console.log(a); //2

函式宣告和函式表示式最重要的區別就是它們的名稱識別符號會被繫結在何處。我們比較一下這兩個**片段,前一段**將函式的名稱識別符號test繫結在所在的函式作用域中,而第二段**中test繫結在函式表示式自身的函式中而不是全域性作用域中。也就是說(function test())()意味著test只能在...這個位置被訪問到,在外部任何位置都訪問不到。test變數名被隱藏在了自身中而不去汙染全域性作用域,這一種非常理想的方法,其實我們常用的框架也是基於這種方法去實現,比如jquery。

函式宣告和函式表示式

如果你知道這裡為什麼會報錯,那就請跳過.function fun var a fun a function1 var del function a,b console.log del 9,3 6 var mul function multiplay a,b mul 3,3 9 console.log...

函式表示式和函式宣告

函式表示式和函式宣告解密 在ecmascript中,建立函式的最常用的兩個方法是函式表示式和函式宣告,兩者期間的區別是有點暈,因為ecma規範只明確了一點 函式宣告必須帶有標示符 identifier 就是大家常說的函式名稱 而函式表示式則可以省略這個標示符 函式宣告 function 函式名稱 引...

函式宣告和函式表示式

以下是函式宣告和函式表達方式的表現形式 function fun var fun function 執行fun 的時候 當用函式宣告的時候,fun 的位置沒有要求,都可以執行 當用函式表示式的時候,fun 需要放在表示式的後面,否則報錯 undefiend 例子如下 fun fun is not a...