我在控制台中运行了以下代码:

    let a3 = 100;
    setTimeout( function(){
            a3 = a3 + 1;
            console.log(a3);
        }, 4000);

     console.log( ++a3+'st');


我不了解上述JavaScript代码的执行顺序。

我期望输出是

EXPECTED OUTPUT

101st     //since console.log(++a3+'st') executes first
101st1   //the setTimeout() function executes


但是我得到的实际输出是

ACTUAL OUTPUT

101st
102


我想了解,如果a3运行后"101st"变成字符串console.log( ++a3+'st');,那么为什么setTimeout()中的代码为什么

setTimeout( function(){
        a3 = a3 + 1;
        console.log(a3);
    }, 4000);


稍后运行,将a3设置为102而不是101st1,因为"101st" + 1 = "101st1"

最佳答案

如果a3运行后console.log( ++a3+'st');成为字符串“ 101st”


没有。该语句对a3所做的全部工作是通过++a3部分将其递增1。然后将其与st串联,产生一个字符串,该字符串已console.log ged,但未保存在任何位置-a3仍为递增的数字。

为了使a3成为字符串,您必须将结果显式分配给a3



let a3 = 100;
setTimeout(function() {
  a3 = a3 + 1;
  console.log(a3);
}, 500);

console.log(a3 = ++a3 + 'st');





(但是请不要那样做-赋值不应该解析为表达式,这是一种代码味道)

关于javascript - 给定代码的JavaScript执行顺序无法理解,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54435450/

10-11 11:53