function foo(){
function bar(a){
i=3
}
for(var i=0;i<10;i++){
bar(i*2)
}
}
bar(...)内部的赋值表达式i = 3意外地覆盖了声明在foo(...)内部for循坏中的i,在这个例子中将会导致无限循环,因为i的值被固定在了3,永远满足i<10这个条件。i=3,不加var 关键字,默认操作的是公有变量
第一次循环,i=0,进入bar之后,i=3,然后++,i=4。i等于4小于10,进入第二次循环,进入bar,i再次被赋值为3,再++,i有等于4了。所以第二次循环开始进入无限循环了。在循环体加个console.log(i)就看出来了。
10 回答11.3k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
函数执行的时候,先把下面所有的var提到函数最前面,执行完这些var(仅声明,不赋值)后,再开始执行正式的函数内容,再遇到var语句如果有赋值,则执行赋值,没赋值,跳过。