具有奇怪输出的主要任务和微任务的执行顺序

时间:2019-05-22 16:58:27

标签: javascript

我只需要解释奇怪的输出,而不是顺序。

console.log('script start');

setTimeout(function() {
  console.log('setTimeout');
}, 0);

Promise.resolve().then(function() {
  console.log('promise1');
}).then(function() {
  console.log('promise2');
});

console.log('script end');

Chrome上的输出

enter image description here

Firefox和IE上的输出相同

enter image description here

那么,为什么出现undefined?为什么Chrome和IE / Firefox之间会有区别?

1 个答案:

答案 0 :(得分:0)

由于console.log的原因,它变得不确定,因为它不返回任何内容,所以您得到了不确定的信息。编写

时,您会遇到同样的情况。
 var a = 10
 //undefined

如果您从代码中删除console.log(),那么您将看到undefined消失了

另一方面,如果添加一些东西,它将产生总和,因此我们不会得到undefined

 10+2
 12

以这个例子为例:

 function add(){
    return 12
 }
 //undefined
 add()
 12

在上面的代码中,当我们定义一个函数时,它不会重现任何内容,因此我们得到undefined,而当我们调用它时,它会返回某些内容,而我们只回答否undefined

我已经检查了您在IE和Chrome上的代码,我得到的输出是相同的。如果您仍然想查看该程序的工作原理,则可以在此处尝试运行它。它将向您显示事件循环,调用堆栈和完整的代码执行。

http://latentflip.com/loupe/