3 回答
TA贡献1866条经验 获得超5个赞
使用var,它会减小变量的范围,否则变量将查找最接近的闭包以查找var语句。如果找不到,var则表示它是全局的(如果处于严格模式下using strict,则全局变量将引发错误)。这可能会导致如下问题。
function f (){
for (i=0; i<5; i++);
}
var i = 2;
f ();
alert (i); //i == 5. i should be 2
如果您var i在for循环中编写警报,则会显示2。
TA贡献1852条经验 获得超7个赞
第一个版本:
for (var x in set) {
...
}
声明一个名为的局部变量x。第二版:
for (x in set) {
...
}
才不是。
如果x已经是局部变量(即您在当前作用域(即当前函数)中早于var x;或var x = ...;某处),则它们将是等效的。如果x还不是局部变量,则使用第二个变量将隐式声明一个全局变量x。考虑以下代码:
var obj1 = {hey: 10, there: 15};
var obj2 = {heli: 99, copter: 10};
function loop1() {
for (x in obj1) alert(x);
}
function loop2() {
for (x in obj2) {
loop1();
alert(x);
}
}
loop2();
你可能会想到这警报hey,there,heli,hey,there,copter,但因为x是一个,它会提醒一样hey,there,there,hey,there,there。你不要那个!var x在for循环中使用。
最重要的for是:如果循环在全局范围内(即不在函数中),则局部范围(x如果使用,则在其中声明该范围var x)与全局范围相同(该范围x在隐式声明如果您x不使用var),那么这两个版本将完全相同。
TA贡献1811条经验 获得超6个赞
你真的应该声明局部变量用var,始终。
您也不应使用“ for ... in”循环,除非您完全确定这就是您想要的。为了遍历实数组(这很常见),您应该始终使用带有数字索引的循环:
for (var i = 0; i < array.length; ++i) {
var element = array[i];
// ...
}
用“ for ... in”遍历普通数组可能会产生意想不到的结果,因为循环可能会拾取除数字索引数组之外的数组属性。
编辑 -在2015年这里可以使用.forEach()遍历数组的方法:
array.forEach(function(arrayElement, index, array) {
// first parameter is an element of the array
// second parameter is the index of the element in the array
// third parameter is the array itself
...
});
.forEach()从IE9开始,该方法存在于Array原型中。
添加回答
举报