我目前使用以下函数在事件循环中对函数调用进行排队:
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
会是一个更合适的名字,但我不太确定。
答案 0 :(得分:2)
ECMAscript代码在所谓的 UI线程中执行,该线程在任何浏览器实现中运行。基本上,所有 UI更新和 Javascript代码块都在该线程内共享(这也是为什么长时间运行Javascript代码会挂起浏览器UI的原因。)
但是,setTimeout
所做的只是将功能的插入排入 UI线程。这反过来意味着,无法保证您的代码实际上将在 xxx miliseconds 中执行,只是它会被推入队列。如果其他进程仍在运行或浏览器在线程内忙,则在处理其他任何进程之前不会执行。
我该怎么称呼它?
“推迟执行ECMAscript代码”
答案 1 :(得分:0)
在第一次通话结束后(背靠背)
执行使用set-timeout
绑定,在第一个事件结束后开始。
所以它是同步的(加入/流入),
我希望我在这里有意义:))