1. 程式人生 > >函式宣告、函式表示式、立即執行函式、你不知道的javascript

函式宣告、函式表示式、立即執行函式、你不知道的javascript

#你不知道的javascript上卷(2)#

1、函式宣告、函式表示式

// 例子一 函式宣告
function foo () {
    var a = 3
    console.log(a) // 3
}
foo ()
// 例子二 函式表示式
(function foo () {
    var a = 3
    console.log(a)
})()

 函式宣告和函式表示式之間最重要的區別是:他們之間的識別符號會繫結在何處

第一個片段中foo被繫結在所在作用域中,可以通過foo()來呼叫它

第二個片段中foo被繫結在函式表示式自身的函式中而不是所在作用域中

即:(function foo() {...})作為函式表示式意味著foo只能在...所代表的的位置中被訪問,外部則不行。foo變數名被隱藏在自身中意味著不會非必要地汙染愛外部作用域

2、匿名錶達式

setTimeout ( function() {
    console.log(I wait 1 second)
}, 1000)

匿名錶達式:因為函式function()...沒有識別符號,函式表示式可以是匿名的,但是函式宣告不能是匿名,在javascript中函式宣告要是匿名的話會報錯 

3、具名錶達式

(function foo () {
    var a = 3
    console.log( a ) //3
})()

(function foo() { })() 立即執行函式表示式   第一個()把函式變成了表示式, 第二個()執行了這個函式