调用setTimeout执行的函数是什么?

时间:2013-03-11 12:05:01

标签: javascript asynchronous settimeout naming deferred

我目前使用以下函数在事件循环中对函数调用进行排队:

Function.prototype.async = function () {
    setTimeout.bind(null, this, 0).apply(null, arguments);
};

这允许我编写如下代码:

alert.async("This will be displayed later.");
alert("This will be displayed first.");

现在我打算将这个功能包含在我正在编写的库中。但是,名称async似乎是对该函数的不准确描述。从技术上讲,该函数不是异步执行。

所以我的问题是,如果setTimeout执行的函数不是异步的,那么它是什么?你会怎么描述它?

我相信defer会是一个更合适的名字,但我不太确定。

2 个答案:

答案 0 :(得分:2)

ECMAscript代码在所谓的 UI线程中执行,该线程在任何浏览器实现中运行。基本上,所有 UI更新 Javascript代码块都在该线程内共享(这也是为什么长时间运行Javascript代码会挂起浏览器UI的原因。)

但是,setTimeout所做的只是将功能插入排入 UI线程。这反过来意味着,无法保证您的代码实际上将在 xxx miliseconds 中执行,只是它会被推入队列。如果其他进程仍在运行或浏览器在线程内忙,则在处理其他任何进程之前不会执行。

我该怎么称呼它?

“推迟执行ECMAscript代码”

答案 1 :(得分:0)

在第一次通话结束后(背靠背)

执行

使用set-timeout绑定,在第一个事件结束后开始。

所以它是同步的(加入/流入),

我希望我在这里有意义:))