2009-11-01 117 views
1

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

回答

4

变量baz在匿名函数之外声明(即使它在您使用函数表达式为其赋值时才实际定义)。这将它的作用域放在所述函数之外。

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

0

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

阅读关于closures了解更多信息。

相关问题