1

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

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会是一个更合适的名字,但我不太确定。

4

2 回答 2

2

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

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

我怎么称呼它?

“推迟执行 ECMAscript 代码”

于 2013-03-11T12:08:56.173 回答
0

它在第一次调用结束后执行(背靠背),

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

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

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

于 2013-03-11T12:09:24.720 回答