JavaScript执行块和消息队列

时间:2017-04-11 15:40:57

标签: javascript angular settimeout nonblocking

是否有可能在循环执行块之后调用延迟为0ms setTimeout(function, 0)的超时函数,或者首先完成包含功能块总是

setTimeout(function(){ //something in here }, 0);

function myFunction() {
  // do something
  // loop block

  // could timeout = 0 be scheduled to execute here?

  // do more things
}

myFunction()

在我的上下文(Angular 2)中,知道Angular' ApplicationRef.tick()是否可以在我完成操作之前调用数据绑定/组件更改是很有意思的。嵌套循环中的-way绑定属性?

函数调用和所有后续子函数调用是否等同于消息队列中的单个项目,还是分解为每个执行块是消息队列中的单个项目?因此setTimeout(..., 0)可能在队列中的执行块之间进入?

1 个答案:

答案 0 :(得分:2)

不,这是不可能的。您可以将javaScript视为"一个线程" - 任何时间点都只运行一个代码。任何超时都将在当前流程结束后执行。 此外,虽然执行javascript页面变得无响应 - 您无法执行任何操作。

一些示范:

setTimeout(function() { console.log(1) }); 
var d = new Date();
var i = 0; for(; i < 1e9; i++) {}
console.log(i);
console.log('Passed ' + (new Date() - d));

>> 1000000000
>> Passed ~2000
>> 1
相关问题