我在控制台中运行了以下代码:
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"
呢?
答案 0 :(得分:1)
如果
from mimetypes import guess_type from os.path import basename f = model.filefield f.open() # msg.attach(filename, content, mimetype) msg.attach(basename(f.name), f.read(), guess_type(f.name)[0]) f.close()
运行后a3
成为字符串“ 101st”
不是。该语句对console.log( ++a3+'st');
所做的全部工作就是通过a3
部分将其加1 。然后将其与++a3
串联在一起,得到一个st
格的字符串,但不保存在任何地方-console.log
仍然是递增的数字。
要使a3
成为字符串,您必须将结果显式分配给a3
:
a3
(但是请不要那样做-不应将赋值解析为表达式,这是一种代码味道)
答案 1 :(得分:0)
让我们分解代码
以下是同步代码,将立即执行,因此在控制台中写入(++100+'st')
=> (101+'st')
=> 101st
let a3 = 100;
...
console.log( ++a3+'st');
setTimeout
是一个异步代码块,将在执行同步代码后执行,因为a3
现在是101
,a3+1
将输出{{1 }}
102
因此您将获得输出
setTimeout( function(){
a3 = a3 + 1;
console.log(a3);
}, 4000);
答案 2 :(得分:0)
实际上没问题。调用此console.log( ++a3+'st');
时,它只会增加到101,而不会101st
使用此
let a3 = 100;
setTimeout( function(){
a3 = a3 + 1;
console.log(a3);
}, 4000);
a3 = (a3 + 1) + 'st'
console.log(a3);