我一直在用JS開發一段時間,雖然我知道下面的代碼工作,但我並不真正瞭解爲什麼它的工作原理。Javascript關閉/變量範圍問題 - 我知道它可行,但爲什麼?
我看到它的方式,我在testClosure函數中定義的TestString,和我期待的是變量「走」的時候testClosure功能完成,因爲它是局部變量。
但是,當我用計時器調用內部函數時,它仍然知道testString變量。爲什麼?當testClosure完成執行時,那個變量是不是在五秒鐘之前消失了?內部函數是否可以引用testClosure中的所有變量,並且它們保持有效,直到所有內部函數完成爲止?
function testClosure() {
var testString = 'hai';
// after 5 seconds, call function below
window.setTimeout(function() {
// check if function knows about testString
alert(testString);
}, 5000);
}
testClosure();
很好的問題。我想這取決於是否'setTimeout'在本質上是異步的,以及'setTimeout'是否具有某種特殊屬性,它在啓動超時部分時保留它需要的信息,然後在執行時使用它... – Jason
dup of http:// stackoverflow.com/questions/111102/how-does-a-javascript-closure-work和其他 –