函式表示式和函式宣告 (自己的記錄)

2022-05-08 12:54:08 字數 959 閱讀 1640

在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...