1 回答

TA貢獻1772條經驗 獲得超8個贊
JavaScript確實是一種單線程語言,但支持異步代碼。
那是什么意思?
這意味著沒有兩個代碼塊會同時運行。在像Java這樣的多線程語言中,兩個函數可以同時運行,每個函數都在自己的線程上運行。然而,在JavaScript中,即使使用異步代碼,所有需要運行的代碼都將被放入一個“隊列”中,只是代碼的順序最終在“隊列”中取決于您的邏輯是否是同步的。
例如:
const work = (a) => {
console.log('Starting work: ' + a);
// Here we simulate some long operation
for (let i = 0; i < 100000; i++) {
document.querySelector('a[href]');
}
console.log('Finished work: ' + a);
};
work(1);
work(2);
work(3);
setTimeout(() => work(4), 2);
setTimeout(() => work(5), 1);
work(6);
work(7);
您將在輸出上看到的是:
Starting work: 1
Finished work: 1
Starting work: 2
Finished work: 2
Starting work: 3
Finished work: 3
Starting work: 6
Finished work: 6
Starting work: 7
Finished work: 7
Starting work: 4 <- This one was async
Finished work: 4 <- This one was async
Starting work: 5 <- This one was async
Finished work: 5 <- This one was async
因此,即使有一些異步代碼,函數總是啟動和完成,而不會異步代碼在執行中途“中斷”它。work
添加回答
舉報