Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/474.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 - Fatal编程技术网

Javascript执行顺序和回调

Javascript执行顺序和回调,javascript,Javascript,我知道以下代码: function do_a(){ // simulate a time consuming function setTimeout( function(){ console.log( '`do_a`: this takes longer than `do_b`' ); }, 1000 ); } function do_b(){ console.log( '`do_b`: this is supposed to come out after `do_a`

我知道以下代码:

function do_a(){
  // simulate a time consuming function
  setTimeout( function(){
    console.log( '`do_a`: this takes longer than `do_b`' );
  }, 1000 );
}

function do_b(){
  console.log( '`do_b`: this is supposed to come out after `do_a` but it comes out before `do_a`' );
}

do_a();
do_b();
导致

`do_b`: this is supposed to come out after `do_a` but it comes out before `do_a`
`do_a`: this takes longer than `do_b`
首先,我想了解为什么javascript决定“继续前进”并首先执行更快的代码

第二,为什么这不能解决问题?例如,为什么警报在for循环完成之前发生

 function doit(start,callback) {
    for (i = 0; i < 100000; i++) { 
        document.getElementById('edit-cut').innerHTML = "<div></div>";
    }
    callback(start);

 }

 var start = Date.now();
 doit(start,function(start){
        var end = Date.now();
        alert(end-start);
 });
函数doit(启动、回调){
对于(i=0;i<100000;i++){
document.getElementById('edit-cut')。innerHTML=“”;
}
回调(启动);
}
var start=Date.now();
doit(启动,功能(启动){
var end=Date.now();
警报(结束-开始);
});
谢谢。

setTimeout()
在指定时间后调用该函数。实际上,JS继续执行b,并在指定的时间后执行匿名函数。第一个方法不模拟耗时的函数。相反,它将intepreter配置为在1000毫秒后调用匿名函数(与其他代码异步)。

setTimeout()
在指定时间后调用该函数。实际上,JS继续执行b,并在指定的时间后执行匿名函数。第一个方法不模拟耗时的函数。相反,它将intepreter配置为在1000毫秒后调用匿名函数(与其他代码异步)。

setTimeout()
在指定时间后调用该函数。实际上,JS继续执行b,并在指定的时间后执行匿名函数。第一个方法不模拟耗时的函数。相反,它将intepreter配置为在1000毫秒后调用匿名函数(与其他代码异步)。

setTimeout()
在指定时间后调用该函数。实际上,JS继续执行b,并在指定的时间后执行匿名函数。第一个方法不模拟耗时的函数。相反,它将intepreter配置为在1000毫秒后调用匿名函数(与其他代码异步)

首先,我想了解为什么javascript决定“继续前进”并首先执行更快的代码

它不会先执行“更快”的代码。它按照命令的顺序执行代码

你跑得快。你跑吧。JS事件循环查找要运行的下一个函数。没有。一秒钟过后,超时结束,传递给它的函数被放入队列中运行。事件循环运行该函数

为什么警报会在for循环完成之前发生

 function doit(start,callback) {
    for (i = 0; i < 100000; i++) { 
        document.getElementById('edit-cut').innerHTML = "<div></div>";
    }
    callback(start);

 }

 var start = Date.now();
 doit(start,function(start){
        var end = Date.now();
        alert(end-start);
 });
没有。您将更新DOM与更新显示混淆了

重新绘制脚本实际上是一项功能。for循环更新DOM。for循环结束。然后警报运行。警报将一直阻止,直到用户单击按钮。所有这些都是严格线性的。事件循环正忙于运行该JS

JS函数完成后,浏览器将重新绘制屏幕,并将更新DOM的结果显示在屏幕上

这就是为什么要在循环中更新DOM,就像通常使用
而不是
for
循环一样

首先,我想了解为什么javascript决定“继续前进”并首先执行更快的代码

它不会先执行“更快”的代码。它按照命令的顺序执行代码

你跑得快。你跑吧。JS事件循环查找要运行的下一个函数。没有。一秒钟过后,超时结束,传递给它的函数被放入队列中运行。事件循环运行该函数

为什么警报会在for循环完成之前发生

 function doit(start,callback) {
    for (i = 0; i < 100000; i++) { 
        document.getElementById('edit-cut').innerHTML = "<div></div>";
    }
    callback(start);

 }

 var start = Date.now();
 doit(start,function(start){
        var end = Date.now();
        alert(end-start);
 });
没有。您将更新DOM与更新显示混淆了

重新绘制脚本实际上是一项功能。for循环更新DOM。for循环结束。然后警报运行。警报将一直阻止,直到用户单击按钮。所有这些都是严格线性的。事件循环正忙于运行该JS

JS函数完成后,浏览器将重新绘制屏幕,并将更新DOM的结果显示在屏幕上

这就是为什么要在循环中更新DOM,就像通常使用
而不是
for
循环一样

首先,我想了解为什么javascript决定“继续前进”并首先执行更快的代码

它不会先执行“更快”的代码。它按照命令的顺序执行代码

你跑得快。你跑吧。JS事件循环查找要运行的下一个函数。没有。一秒钟过后,超时结束,传递给它的函数被放入队列中运行。事件循环运行该函数

为什么警报会在for循环完成之前发生

 function doit(start,callback) {
    for (i = 0; i < 100000; i++) { 
        document.getElementById('edit-cut').innerHTML = "<div></div>";
    }
    callback(start);

 }

 var start = Date.now();
 doit(start,function(start){
        var end = Date.now();
        alert(end-start);
 });
没有。您将更新DOM与更新显示混淆了

重新绘制脚本实际上是一项功能。for循环更新DOM。for循环结束。然后警报运行。警报将一直阻止,直到用户单击按钮。所有这些都是严格线性的。事件循环正忙于运行该JS

JS函数完成后,浏览器将重新绘制屏幕,并将更新DOM的结果显示在屏幕上

这就是为什么要在循环中更新DOM,就像通常使用
而不是
for
循环一样

首先,我想了解为什么javascript决定“继续前进”并首先执行更快的代码

它不会先执行“更快”的代码。它按照命令的顺序执行代码

你跑得快。你跑吧。JS事件循环查找要运行的下一个函数。没有。一秒钟过后,超时结束,传递给它的函数被放入队列中运行。事件循环运行该函数

为什么在for循环i之前发生警报