是否可以调用闭包内定义的函数?

时间:2009-11-01 08:12:23

标签: javascript closures

在下面的代码中,我可以调用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

2 个答案:

答案 0 :(得分:4)

变量baz在匿名函数之外声明(即使在使用函数表达式为其赋值之前实际上没有定义它)。这将其范围置于所述函数之外。

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

答案 1 :(得分:0)

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

了解更多信息,请阅读closures