下面这段代码,我以为会输出1-10,结果输出的是5,而且不停地输出5,是个死循环,想不明白,求大神赐教。谢谢!function initloop() { function doLoop(x) { i = 3; console.log(x); } for (var i = 0; i < 10; i++) { doLoop(i + 1); }}initloop();
1 回答
小怪兽爱吃肉
TA贡献1852条经验 获得超1个赞
那个 i 其实相当于是在 initloop 里声明的.
function initloop() {
var i = 0;
function doLoop(x) {
i = 3;
console.log(x);
}
for ( ; i < 10; i++) {
doLoop(i + 1);
}
}
initloop();
这样看, 你脑补一下函数执行过程, 应该就明白了.
每次循环, i 都会在 doloop 里被修改成 3,
doloop 执行结束后, 执行 i++, 这时传入 loop 的实参应该就是 4 + 1;
所以 console 先是1, 然后一直死循环输出 5.
想要按你的想法输出 1 - 10, doloop 里的 i 加上 var.让它成为局部变量.
添加回答
举报
0/150
提交
取消