【问题标题】:Is it possible to call a function defined inside a closure?是否可以调用在闭包内定义的函数?
【发布时间】:2009-11-01 08:12:23
【问题描述】:

在下面的代码中,我可以调用 baz.我还在其他地方读到“JavaScript 具有函数级范围”。我知道,我在某个地方把自己弄糊涂了。有人可以让我理解吗?

/* An anonymous function used as a closure. */
var baz;
(function() {
    var foo = 10;
    var bar = 2;
    baz = function() { 
        return foo * bar; 
    };
})();

baz(); // baz can access foo and bar, even though it is executed outside of the
       // anonymous function

.

【问题讨论】:

    标签: javascript closures


    【解决方案1】:

    变量baz 在匿名函数外部声明(即使在您使用函数表达式为其赋值之前它并未真正定义)。这将其范围置于所述功能之外。

    foobar 在匿名函数内声明,这将它们的范围限制在该函数内。分配给baz 的函数可以访问它们,因为它们在创建时就在作用域内。

    【讨论】:

      【解决方案2】:

      大卫解释得很好。在您定义 baz 的范围内的内容在您的匿名函数返回后仍然可用。

      阅读closures了解更多信息。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-07-23
        • 2012-06-26
        • 1970-01-01
        • 2020-09-02
        相关资源
        最近更新 更多