求分析 | 这段 JavaScript 代码的输出为什么是 5 ?

下面这段代码,我以为会输出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();


不负相思意
浏览 541回答 1
1回答

小怪兽爱吃肉

那个 i 其实相当于是在 initloop 里声明的.function initloop() {&nbsp; &nbsp; var i = 0;&nbsp; &nbsp; function doLoop(x) {&nbsp; &nbsp; &nbsp; &nbsp; i = 3;&nbsp; &nbsp; &nbsp; &nbsp; console.log(x);&nbsp; &nbsp; }&nbsp; &nbsp; for ( ; i < 10; i++) {&nbsp; &nbsp; &nbsp; &nbsp; doLoop(i + 1);&nbsp; &nbsp; }&nbsp; &nbsp;&nbsp;}initloop();这样看, 你脑补一下函数执行过程, 应该就明白了.每次循环, i 都会在 doloop 里被修改成 3,&nbsp;doloop 执行结束后, 执行 i++, 这时传入 loop 的实参应该就是 4 + 1;所以 console 先是1, 然后一直死循环输出 5.想要按你的想法输出 1 - 10, doloop 里的 i 加上 var.让它成为局部变量.
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript