给定代码的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);