** 函式表示式和函式宣告解密
在ecmascript中,建立函式的最常用的兩個方法是函式表示式和函式宣告,兩者期間的區別是有點暈,因為ecma規範只明確了一點:函式宣告必須帶有標示符(identifier)(就是大家常說的函式名稱),而函式表示式則可以省略這個標示符:
函式宣告:
function 函式名稱(引數:可選)
函式表示式:
function 函式名稱(可選)(引數:可選)
所以,可以看出,如果不宣告函式名稱,它肯定是表示式,可如果宣告了函式名稱的話,如何判斷是函式宣告還是函式表示式呢?ecmascript是通過上下文來區分的,如果function foo(){}是作為賦值表示式的一部分的話,那它就是乙個函式表示式,如果function foo(){}被包含在乙個函式體內,或者位於程式的最頂部的話,那它就是乙個函式宣告。
還有一種函式表示式不太常見,就是被括號括住的(function foo(){}),他是表示式的原因是因為括號 ()是乙個分組操作符,它的內部只能包含表示式,我們來看幾個例子:
function foo(){} //函式宣告
(function foo(){}); //
函式表示式:包含在分組操作符內
try catch(err)
函式宣告的實際規則如下:
函式宣告只能出現在程式或函式體內。從句法上講,它們 不能出現在block(塊)()中,例如不能出現在 if、while 或 for 語句中。因為 block(塊) 中只能包含statement語句, 而不能包含函式宣告這樣的源元素。另一方面,仔細看一看規則也會發現,唯一可能讓表示式出現在block(塊)中情形,就是讓它作為表示式語句的一部分。但是,規範明確規定了表示式語句不能以關鍵字function開頭。而這實際上就是說,函式表示式同樣也不能出現在statement語句或block(塊)中(因為block(塊)就是由statement語句構成的)。
函式宣告和函式表示式
如果你知道這裡為什麼會報錯,那就請跳過.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...
函式宣告和函式表示式
以下是函式宣告和函式表達方式的表現形式 function fun var fun function 執行fun 的時候 當用函式宣告的時候,fun 的位置沒有要求,都可以執行 當用函式表示式的時候,fun 需要放在表示式的後面,否則報錯 undefiend 例子如下 fun fun is not a...
函式宣告和函式表示式
定義函式的常見方法 函式宣告的乙個特徵 函式宣告提公升 函式宣告如 function fname 函式表示式也是常見的建立函式的方法 var fname function 函式表示式的另一種宣告的方法 function f 是一組分組操作符,它的內部只能包含表示式 注意 函式表示式與其他表示式一樣,...