JavaScript能同时运行多个函数吗?

3

是否可以同时调用多个函数?

例如:

var executed = false;
// loop 1
func();
// loop 2
func();

function func(){
    if (executed) return;
    executed = true;
    alert(1);
}

func()能够同时执行2次吗?


3
JavaScript就像大多数编程语言一样,除非您明确使用异步运行或使用线程(例如JavaScript WebWorkers),否则所有内容都按顺序执行。 - Barmar
1
当你写func(); func();时,它不会执行第二个调用,直到第一个调用返回。 - Barmar
2
JavaScript没有(标准的)提供可以交互的并发执行上下文(即“线程”)。异步性和并发性是不同的。因此,“同时”应该更好地加以限定。 - user2864740
Node JS 是我所知道的最接近真正异步的东西。 - Stephen J
欢迎来到StackOverflow!您能提供更多信息吗?您说“同时运行多个函数”,但是您的代码片段显示了同一个函数被调用两次,这并不是同一件事情。 - styfle
显示剩余7条评论
4个回答

3
我知道的处理器都不能同时执行语句。大多数计算机有多个处理器,因此它们可以在多个处理器上运行多个语句。因此,唯一可能的解决方案是打开两次浏览器,打开相同的页面并希望js并行执行(或使用一些高级的NodeJS或WebWorkers等)。
然而,通常情况下不是在“同一时间”内运行,而是非常快速地在两个线程之间切换,以便看起来像是在“同一时间”(称为多任务处理)。你可以在js中这样做:
var executed = false;
var theother=new Promise( r=>setTimeout(r,0));
func();
// loop 2
func();

async function func(){
if (executed) return;
await theother;
executed = true;
alert(1);
}

或者旧式写法(为了解决“魔法”):
var executed = false;
// loop 1
func();
// loop 2
func();

function func(){
if (executed) return;
setTimeout(function(){
  executed = true;
  alert(1);
 },0);
}

3

JavaScript没有原生的支持同时运行多个函数。历史上,它依赖于用本机代码处理耗时任务(例如等待HTTP请求或进行CPU密集型操作),该本机代码向JS提供API(并且该API接受回调或最近返回Promise)。

这开始发生改变。

大多数Web浏览器支持Web Workers,Node.js已经引入了Worker Threads的实验性支持。

它们允许将JavaScript代码分配到独立进程中,该进程独立于主事件循环运行,并使用消息与主进程通信。


0

你不能这样做。因为JavaScript不支持多线程。Web浏览器的每个选项卡只有一个解释器,而浏览器中的JavaScript解释器是单线程的。在此处查看单线程示例。

还可以查看这个答案


-3
请使用以下代码。
<!DOCTYPE html>
<html>
<head>
    <title>sample test</title>
    <script type="text/javascript">

        print=function(msg) {
            var ifunction=function(){
                console.log(msg);
            }
            return ifunction;
        };

        button1=function(name,count){
                for (var i =0 ;i <count; i++) {
                    setTimeout(print(name+":"+i+"seconds over after button1 click"),i*500);
                }
        };

    </script>
</head>
<body>
    <form>
        <input type="" name="" />
        <input type="button" value="button1" onclick="button1('button1',5)" />
        <input type="button" value="button2" onclick="button1('button2',5)" />
    </form>
</body>
</html>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接