无法理解这个JavaScript构造

时间:2016-03-04 13:28:02

标签: javascript

下面我附上了Eloquent JavaScript书第10章的摘录。

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));

我无法理解为什么这个函数有一个尾随的();

它的用途是什么?我试过找到答案,但我不知道该找什么。

有人可以解释一下为什么最后添加这个结构吗?任何帮助都是非常宝贵的。

1 个答案:

答案 0 :(得分: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?