2009-11-01 46 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瞭解更多信息。

相關問題