for(i=0; i<arr.length; i++) {
var j=0;
// ...
}
说上面创建了一个全局变量是不正确的i
。我相信你应该总是使用var
来声明变量(除非你故意想要一个“属性”而不是一个“变量”——这在 99.99% 的 JS 编码场景中是不太可能的......)
var
在分配初始值时省略i
不是创建局部变量,甚至不是全局变量,而是为i
全局对象创建一个属性(它可能看起来/行为大多像一个全局变量 - 但它们有一些细微的差异)。
更好的是:
var i;
for(i=0; i<arr.length; i++) {
var j=0;
// ...
}
现在循环正在使用全局变量i
(或函数局部变量i
,如果此代码出现在函数中)
在什么是 var 关键字和变量与 Javascript 中的属性的功能中查看更多信息
-- 注意,有点令人困惑的是你可以重新声明一个变量,例如在第二个循环中
for(var i=0; i<9; i++){
document.write('i = ' + i + '<br>');
}
for(var i=0; i<9; i++){
document.write('i = ' + i + '<br>');
}
这似乎是有效的(我测试时没有错误)。似乎您可以在 JavaScript 中重新声明变量 - 但它可能不是一个好主意,除非有特殊情况 - 请参阅这个相关问题,提到 [Google Analytics(分析)如何使用变量的“安全”重新声明](重新声明一个 javascript 变量)
i
在这个相关的 SO 问题中有一些关于在 JS 中重新声明变量(以及类似循环变量)的讨论:在循环内部或外部声明变量
有一个用于单一声明变量的 JavaScript 模式