for in多重循环变量作用域的问题
在for多重循环里最外层循环变量在内部是能被修改的,但最近在使用for in时发现不一样,下面代码大家可以放到chrome console里试试
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")}
发现输出结果是这样
0--1 VM563:2
0--2 VM563:2
1--2 VM563:2
2--2 VM563:2
2--3 VM563:2
1--1 VM563:2
0--2 VM563:2
1--2 VM563:2
2--2 VM563:2
2--3 VM563:2
外部的循环变量i不受内部循环的值的影响,求解,先谢过。
------解决方案--------------------很简单啊
在for(var i=0; i<a; i++)中,循环的流程完全都是i控制的。改变i的值就改变了循环的流程。
在for (var i in o)中,i只是用来接收对象的属性名称,循环的流程不是i控制,改变i的值不影响循环的流程
------解决方案--------------------
js中没有“块作用域”,只有“函数作用域”
------解决方案--------------------
不是内外层的i不会相互影响,而是改变i的值也不会影响循环的流程,影响的只是i变量本身