我在控制台中运行了以下代码:
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/