个人理解应该是变量作用域的原因 同一个函数/方法下 局部变量比全局变量优先级高(同名变量)var a=["123","sdf"],b=["sd","ss","ee"]; for(i in a){console.log(i+"--1");for(i in b){console.log(i+"--2");}console.log(i+"--3")}ASvar a=["123","sdf"],b=["sd","ss","ee"]; for(var i in a){ console.log(i+"--1"); for(var i in b){ console.log(i+"--2"); } console.log(i+"--3") }
很简单啊 在for(var i=0; i<a; i++)中,循环的流程完全都是i控制的。改变i的值就改变了循环的流程。 在for (var i in o)中,i只是用来接收对象的属性名称,循环的流程不是i控制,改变i的值不影响循环的流程
0--2//内层i
1--2//内层i
2--2//内层i
2--3//外层i
1--1//外层i
0--2//内层i
1--2//内层i
2--2//内层i
2--3//外层i最后一次外层2--1因为内层的i改了,所以跳过最后一次循环
大哥。。你跟一次就知道了
同一个函数/方法下 局部变量比全局变量优先级高(同名变量)var a=["123","sdf"],b=["sd","ss","ee"];
for(i in a){console.log(i+"--1");for(i in b){console.log(i+"--2");}console.log(i+"--3")}ASvar a=["123","sdf"],b=["sd","ss","ee"];
for(var i in a){
console.log(i+"--1");
for(var i in b){
console.log(i+"--2");
}
console.log(i+"--3")
}
在for(var i=0; i<a; i++)中,循环的流程完全都是i控制的。改变i的值就改变了循环的流程。
在for (var i in o)中,i只是用来接收对象的属性名称,循环的流程不是i控制,改变i的值不影响循环的流程
不是内外层的i不会相互影响,而是改变i的值也不会影响循环的流程,影响的只是i变量本身