Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/425.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript可以同时运行多个函数吗?_Javascript_Multithreading - Fatal编程技术网

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>