退房的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