2016-03-04 29 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?