2016-03-04 59 views
0

下面我附上了Eloquent JavaScript書的第10章的摘錄。無法理解此JavaScript構造

var dayName = function() { 
    var names = ["Sunday", "Monday", "Tuesday", "Wednesday", 
     "Thursday", "Friday", "Saturday" 
    ]; 
    return function (number) { 
     return names[number]; 
    }; 
}(); //==> '();' this construct right here.... 

console.log(dayName(3)); 

什麼我不明白是爲什麼這個功能具有後();

它有什麼用?我試圖找到答案,但我不知道要尋找什麼。

任何人都可以解釋爲什麼最終添加了這個構造嗎?任何幫助都是無價的。

+0

@Tushar但是,這不是在這裏叫@ 「的console.log(DAYNAME(3));」 – SRINI794

回答

3

立即調用該函數並將返回的值分配給該變量。

var name = function() { 
    // Function body 
}(); 

在你的情況下,該函數返回另一個函數。因此,函數dayName是可以訪問變量names的返回函數。

內部函數是closure因此可以訪問外部函數變量。

換言之,該函數是

var dayName = function (number) { 
    return names[number]; 
}; 

與具有訪問私有變量names

另見

  1. What is the (function() { })() construct in JavaScript?
  2. How do JavaScript closures work?