【问题标题】:Closure in Javascript (Simple)Javascript中的闭包(简单)
【发布时间】:2013-06-09 04:23:29
【问题描述】:

我对编程非常陌生,并且有一个关于此处给出的闭包演示的快速问题: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 时发生的情况的描述,因为该函数没有指定的参数。

如果我问的是基本问题或使用了不正确的术语,我深表歉意。我已经研究了一些相关的问题,但唉,无济于事!在此先感谢您提供完美答案的好心人。

【问题讨论】:

标签: javascript function closures


【解决方案1】:

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 用简单的术语讨论闭包。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-14
    • 1970-01-01
    • 1970-01-01
    • 2011-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多