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

查看:61
本文介绍了求分析 | 这段 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();

解决方案

那个 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.让它成为局部变量.

这篇关于求分析 | 这段 JavaScript 代码的输出为什么是 5 ?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆