JS函式 函式宣告和函式表示式之間的恩怨

2021-07-02 16:56:13 字數 1648 閱讀 4926

「函式宣告」和「函式表示式」其實說白了 就是定義函式的方式

函式宣告:

function 函式名()
通過上面方式定義的函式就是函式宣告

函式表示式:通過函式表示式定義函式的方式比較多

1. var a = function test() // 這是命名的函式表示式

var a = function() // 這是匿名的函式表示式
2. 將「函式宣告」定義的函式 用一對小括號括起來,這樣也形成了函式表示式

(function test())  //這樣也是函式表示式
3. 還有就是在「函式宣告」前加位運算子 也能構成函式表示式

例如:這些都是函式表示式

~function test()

+function test()

-function test()

!function test()

區別:函式宣告 和 函式表示式 有哪些區別那??

1.函式表示式可以直接 在後面加小括號執行(這就是函式自執行),而函式宣告不可以

例如:

var a = function test() 

// 這是乙個函式表示式,在這個表示式後面加個括號,就可以自動執行函式了

var a = function test() ();
而函式宣告的方式 加個小括號是不可以執行的,例如 瀏覽器會提示這種寫法是錯誤的

function test() ();
例如:

window.onload = function () 

}

通過函式宣告的方式定義的函式是可以被預解析的,所以在function test()之前呼叫test()函式,自然彈出hello,

window.onload = function () 

}

通過函式表示式的方式定義的函式是不能被預解析的,所以在函式之前呼叫a(),就會報錯

再看乙個例子:

window.onload = function () 

}else}}

我們本來想讓

if成立的時候彈出

1,不成立彈出

2但是因為js會預解析,所以永遠都是彈出2;但是使用函式表示式就可以避免這種情況

window.onload = function () 

}else

}a();

}

因為函式表示式不會被預解析,所以會按正常的邏輯進行,自然就彈出的是

1所以記住: 在寫程式的時候,如果需要根據不同的條件判斷 來決定執行不同的函式,那麼此時一定要用「函式表示式」的形式來定義函式。這樣可以避免很多錯誤發生

js函式宣告和函式表示式

區分函式宣告和表示式最簡單的方法是看function關鍵字出現在宣告中的位置 不僅僅是一行 而是整個宣告中的位置 如果function是宣告中的第乙個詞,那麼就是乙個函式宣告,否則就是乙個函式表示式。函式宣告和函式表示式間最重要的區別是它們的名稱識別符號將會繫結在何處。匿名函式表示式,因為funct...

JS 函式宣告和函式表示式

function name function為關鍵字 後加函式名name 可以把函式宣告放在它的呼叫語句之後。原因 解析器在向執行環境中載入資料時,解析器會在執行 前讀取函式宣告,即函式宣告提公升。a function a 沒有錯誤 var a function num1,num2 類似乙個變數賦值...

js 函式宣告和函式表示式

今天我們來講函式宣告和函式表示式 主要從函式定義和兩種定義的區別,以及塊級作用域來講 定義函式有兩種方式,一種是函式表示式,一種是函式宣告式 函式宣告式 function fun arguments 函式表示式 var fun function arguments 1 變數提公升 只有通過函式宣告的...