是否可以同时调用多个功能?
E.g。
var executed = false;
// loop 1
func();
// loop 2
func();
function func(){
if (executed) return;
executed = true;
alert(1);
}
func()可以一次执行2次吗?
答案 0 :(得分:3)
JavaScript不支持同时运行多个功能。从历史上看,它依赖于耗时的任务(例如等待HTTP请求或执行CPU密集型操作),而该原生代码会向JS提供API(并且该API接受回调或最近返回一个保证)。
这开始改变。
大多数Web浏览器都支持Web Workers,而Node.js引入了对Worker Threads的实验性支持。
每个都允许将JavaScript代码移植到一个独立的进程中,该进程独立于主事件循环运行,并使用消息与主进程进行通信。
答案 1 :(得分:1)
我所知道的任何处理器都不能同时执行语句。大多数计算机都有多个处理器,因此可以在多个处理器上运行多个语句。所以唯一可行的解决方案是打开浏览器两次,打开同一页面并希望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);
}
答案 2 :(得分:0)
你不能这样做。因为JavaScript不支持多线程。 Web浏览器的每个选项卡只有一个解释器,浏览器中的JavaScript解释器是一个单独的线程。请参阅单线程here的示例。
另见this answer。
答案 3 :(得分:-1)
使用以下代码
<!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>