退房的HTML/Javascript代碼下面的代碼片段:for()循環中聲明的Javascript變量的作用域是什麼?
<html>
<head>
<script type="text/javascript">
var alerts = [];
for(var i = 0; i < 3; i++) {
alerts.push(function() { document.write(i + ', '); });
}
for (var j = 0; j < 3; j++) {
(alerts[j])();
}
for (var i = 0; i < 3; i++) {
(alerts[i])();
}
</script>
</head><body></body></html>
此輸出:
3, 3, 3, 0, 1, 2
這不是我所期待的 - 我期待輸出0, 1, 2, 0, 1, 2,
我(錯誤地)認爲被推入到數組中的匿名函數會表現爲閉包,捕獲創建函數時分配的值i
- 但它實際上似乎是i
表現爲全局變量。
任何人都可以解釋這個代碼示例中i
的範圍發生了什麼,以及爲什麼匿名函數沒有捕獲它的值?
正確答案 - 謝謝! - 但我接受了Pointy的回答,因爲「我自己的私人」+愛達荷讓我大聲笑出聲來...... – 2010-04-28 22:14:07