关于for循环。

<body>
    <button onclick="test()">点击查看</button>
    <p id="content"></p>
    <script type="text/javascript">
    function test() {
        var x = '';
        for (var i = 0; i < 5; i++) {
            x = x + '当前数字是' + i + "<br>";
        }
        document.getElementById('content').innerHTML = x;
    }
    </script>
</body>

输出结果是:
“当前数字是0
当前数字是1
当前数字是2
当前数字是3
当前数字是4”

为什么这句 x = x + '当前数字是' + i + "<br/>";
写成x ='当前数字是' + i + "<br>"for循环会直接只打印出 “当前数字是4” ?

阅读 2.7k
3 个回答
function test() {
    var x = '';
    for (let i = 0; i < 5; i++) {
        x = '当前数字是' + i + "<br>";
        console.log(x);
    }
    console.log(x);
}
test();
// 当前数字是0<br>
// 当前数字是1<br>
// 当前数字是2<br>
// 当前数字是3<br>
// 当前数字是4<br>
// 当前数字是4<br>

因为循环执行,x每次都被赋值覆盖。最后赋值成了当前数字是4<br>.
而第一种是相加起来了,没有被赋值覆盖。

这个问题简化一下

var a = 1;
a = 2;
a = 3;
a = 4;
a = 5;
console.log("a = " + a);
//请问a输出几,是输出5还是12345

这要是还不知道,我也是没辙了。。。

因为当你做x+一个字符串时候,JS的处理机制是:新建一个临时字符串,将新字符串赋值为 x + '.' ,然后返回这个新字符串并同时销毁原始字符串。这样子你每次输出的就是新地址的字符。但是你直接等于的话就是覆盖了。js会输出这一个变量的最终值。点个赞哈 哥们

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题