gpt4 book ai didi

无法理解给定代码的 JavaScript 执行顺序

转载 作者:行者123 更新时间:2023-11-29 23:07:50 25 4
gpt4 key购买 nike

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

    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

我想理解的是,如果 a3console.log(++a3+'st'); 之后变成字符串 "101st"; 运行,那为什么setTimeout()

里面的代码
setTimeout( function(){
a3 = a3 + 1;
console.log(a3);
}, 4000);

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

最佳答案

if a3 becomes a string "101st" after console.log( ++a3+'st'); runs

事实并非如此。该语句对 a3 的所有作用是通过 ++a3 部分将其递增。然后将其与 st 连接,生成一个字符串,该字符串是 console.logged,但未保存在任何地方 - a3 保持递增的数字。

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

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

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

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

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com