javascript可以同时运行多个函数吗?
可以同时调用多个函数吗 例如javascript可以同时运行多个函数吗?,javascript,multithreading,Javascript,Multithreading,可以同时调用多个函数吗 例如 func()可以一次执行两次吗?据我所知,没有一个处理器可以同时执行语句。大多数计算机都有多个处理器,因此它们可以在多个处理器上运行多条语句。因此,唯一可能的解决方案是打开浏览器两次,打开同一个页面,并希望js并行执行(或者使用一些奇特的NodeJ或WebWorkers等) 然而,与其同时运行,不如在两个线程之间快速切换,这样看起来就像是在同一时间(称为多任务处理)。您可以在js中这样做: var executed = false; var theother=new
func()可以一次执行两次吗?据我所知,没有一个处理器可以同时执行语句。大多数计算机都有多个处理器,因此它们可以在多个处理器上运行多条语句。因此,唯一可能的解决方案是打开浏览器两次,打开同一个页面,并希望js并行执行(或者使用一些奇特的NodeJ或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);
}
或旧式(解决魔法):
你不能这样做。因为JavaScript不支持多线程。web浏览器的每个选项卡都只有一个解释器,浏览器中的JavaScript解释器是一个线程。请参见单线程的示例 另请参见。使用以下代码
<!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>
样品试验
打印=功能(msg){
var iffunction=function(){
控制台日志(msg);
}
返回ifunction;
};
button1=函数(名称、计数){
for(var i=0;iJavaScript不支持同时运行多个函数。从历史上看,它依赖于使用向JS提供API的本机代码处理耗时的任务(如等待HTTP请求或执行CPU密集型任务)(以及接受回调或最近返回承诺的API)
这种情况正在开始改变
大多数web浏览器都支持,Node.js已经引入了对的实验性支持
这些都允许JavaScript代码被分配到独立于主事件循环运行的单独进程中,并使用消息与主进程通信。JavaScript与大多数编程语言一样,一切都是按顺序执行的,除非您明确使用异步运行或使用线程的程序(例如Javascript WebWorkers)。当您编写func();func();
时,它不会执行第二个调用,直到第一个调用返回。@除非它们是异步的。Javascript没有(标准)提供可以交互的并发执行上下文(即“线程”)。异步性和并发性是不同的。因此,“同时”Node JS是我所知道的最接近真正异步的东西
var executed = false;
// loop 1
func();
// loop 2
func();
function func(){
if (executed) return;
setTimeout(function(){
executed = true;
alert(1);
},0);
}
<!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>