猿问

竞争条件在 JavaScript 中存在吗?

我不知道这个问题与Stack Overflow有关。但我不知道该问哪里。

竞争条件是否适用于JavaScript,因为我学习了JavaScript作为单线程语言。

我在JavaScript中看到过一些关于竞争条件的YouTube视频的例子。但没有什么能澄清我。如果有人可以向我解释在单线程JavaScript世界中如何可能出现竞争条件?


慕沐林林
浏览 70回答 1
1回答

料青山看我应如是

JavaScript确实是一种单线程语言,但支持异步代码。那是什么意思?这意味着没有两个代码块会同时运行。在像Java这样的多线程语言中,两个函数可以同时运行,每个函数都在自己的线程上运行。然而,在JavaScript中,即使使用异步代码,所有需要运行的代码都将被放入一个“队列”中,只是代码的顺序最终在“队列”中取决于您的逻辑是否是同步的。例如:const work = (a) => {&nbsp; console.log('Starting work: ' + a);&nbsp; // Here we simulate some long operation&nbsp; for (let i = 0; i < 100000; i++) {&nbsp; &nbsp; document.querySelector('a[href]');&nbsp; }&nbsp; 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: 1Finished work: 1Starting work: 2Finished work: 2Starting work: 3Finished work: 3Starting work: 6Finished work: 6Starting work: 7Finished work: 7Starting work: 4 <- This one was asyncFinished work: 4 <- This one was asyncStarting work: 5 <- This one was asyncFinished work: 5 <- This one was async因此,即使有一些异步代码,函数总是启动和完成,而不会异步代码在执行中途“中断”它。work
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答