给定代码的JavaScript执行序列不可理解

给定代码的JavaScript执行序列不可理解,javascript,Javascript,我在控制台中运行了以下代码: let a3 = 100; setTimeout( function(){ a3 = a3 + 1; console.log(a3); }, 4000); console.log( ++a3+'st'); 我不理解上述JavaScript代码的执行顺序 我希望输出是 EXPECTED OUTPUT 101st //since console.log(++a3+'

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

    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    
我想了解,如果
console.log(++a3+'st')之后
a3
变成字符串
“101st”
运行,那么为什么
setTimeout()中的代码


之后运行,将
a3
作为
102
而不是
101st1
,因为
“101st”+1=“101st1”

让我们来分解代码

以下是同步代码,将立即执行,因此在控制台中写入
(++100+'st')
=>
(101+'st')
=>
101st

 let a3 = 100;
 ...
 console.log( ++a3+'st'); 
setTimeout
是一个异步代码块,将在执行同步代码后执行,因为
a3
现在是
101
a3+1
将输出
102

setTimeout( function(){
  a3 = a3 + 1;
  console.log(a3);
}, 4000);
因此您得到了输出

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

没有。该语句对
a3
的作用是通过
++a3
部分将其递增1。然后与
st
连接,生成一个字符串,该字符串为
console.log
ged,但不保存在任何位置-
a3
保留递增的数字

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

设a3=100;
setTimeout(函数(){
a3=a3+1;
控制台日志(a3);
}, 500);

log(a3=++a3+'st')实际上什么是好的。当您调用这个
console.log(++a3++'st')它只会将其增加到101,但不会使用此

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

您不能使用“st”设置或分配
a3
。您只需在执行
console.log(++a3+'st')时对其进行增量、字符串追加并记录
let a3 = 100;
    setTimeout( function(){
            a3 = a3 + 1;
            console.log(a3);
        }, 4000);
a3 = (a3 + 1) + 'st'
console.log(a3);