在ecmascript中,建立函式的最常用的兩個方法是函式表示式和函式宣告,兩者期間的區別是有點暈,ecma的規範明確了一點~函式宣告必須帶有標示符 (identifier)就是大家說的(函式名),而函式表示式則可以省略函式名。
那麼沒有函式名那肯定就是函式表示式了,那麼有函式名時,如何區分它是函式表示式還是函式宣告呢~~如果是作為賦值表示式的一部分則為函式表示式,如果是包含在乙個函式體內,或者位於程式的最頂部的話則作為函式宣告~
function foo(){} //宣告,因為它是程式的一部分
var bar = function foo(){}; //
表示式,因為它是賦值表示式的一部分
newfunction bar(){}; //
表示式,因為它是new表示式
(function
() //
宣告,因為它是函式體的一部分
})();
差別:
表示式和宣告的差別很小~宣告是先於任何表示式解析和計算之前的~
命名函式表示式(有函式名的函式表示式)
提到命名函式表示式,理所當然,就是它得有名字,前面的例子var bar = function foo(){};就是乙個有效的命名函式表示式,但有一點需要記住:這個名字只在新定義的函式作用域內有效,因為規範規定了標示符不能在外圍的作用域內有效:
var f = function foo();// foo在外部用於是不可見的
typeof foo; // "undefined"
f(); // "function"
既然,這麼要求,那命名函式表示式到底有啥用啊?為啥要取名?
正如我們開頭所說:給它乙個名字就是可以讓除錯過程更方便,因為在除錯的時候,如果在呼叫棧中的每個項都有自己的名字來描述,那麼除錯過程就太爽了,感受不一樣嘛。
函式宣告和函式表示式
如果你知道這裡為什麼會報錯,那就請跳過.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...