关闭Javascript(简单)

时间:2013-06-09 04:23:29

标签: javascript function closures

我对编程非常陌生,对于此处给出的闭包演示有一个快速的问题:http://youtu.be/hQVTIJBZook?t=27m19s

代码是:

var digit_name = function () {
    var names = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine'];
    return function (n) {
        return names[n];
    };
} ();

alert(digit_name(3));

我的问题是:为什么函数();之外还有digit_name?我们是在调用匿名辅助功能吗?我在没有();的情况下运行它,然后返回" function (n) {return names[n];} "。我非常感谢将参数3传递给函数digit_name时对参数3的影响,因为该函数没有指定的参数。

如果我问一个基本问题或使用不正确的术语,我道歉。我调查了一些相关的问题,但唉,无济于事!提前感谢您提供一个很好的答案。

1 个答案:

答案 0 :(得分:2)

In that code,它创建外部函数execute immediately,从而将内部函数返回为digit_name。但由于返回的函数带有对names的引用,因此外部函数的范围不会像通常那样终止。因此,范围仍然存在,并成为一个封闭。

就像在做:

function anon() {
  var names = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine'];
  return function (n) {
    return names[n];
  };
}

var digit_name = anon();

alert(digit_name(3));

因此,当您致电digit_name()时,您实际上正在调用返回的内部函数,该函数带有自己的names

我建议你阅读closures at MDN。我也有an article用简单的术语讨论闭包。