我对编程非常陌生,对于此处给出的闭包演示有一个快速的问题: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的影响,因为该函数没有指定的参数。
如果我问一个基本问题或使用不正确的术语,我道歉。我调查了一些相关的问题,但唉,无济于事!提前感谢您提供一个很好的答案。
答案 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用简单的术语讨论闭包。