3

编辑:我的这个问题已经证明是非常不合适的。我仍然相信,尤其是通过评论,它可能会提供一些思考的食物,但如果能达到足够多的票数来关闭它,我会理解的。


在研究一篇关于通过在 JavaScript 中模拟 call/cc 来展开调用堆栈的方法的非常有趣的论文的研究期间(延续和回调之间有什么区别?)我遇到了似乎是对主要使用方式的根本改进使 JS 函数调用异步

最流行的方式是setTimeout(fun, 0)。这种构造fun从当前执行线程中调用,并允许事件队列中的其他作业进行。然而,当轮到它时,fun它在所有情况下都维护它的整个调用堆栈。

但是,如果像上面提到的论文那样,将代码更改为setTimeout.bind(null, fun, 0)并且我们正在以连续传递样式进行编程(没有return要记住的指令),那么调用堆栈将fun清除并返回深度 1。

可以在一个示例中看到所有这些在起作用。在 Chrome、FF、IE、Opera 中验证。

示例 HTML 页面非常易于下载并在打开开发者工具的浏览器中运行。第 18 行和第 42 行有两条暂停指令,您可以在其中观察由setTimeout.

问题是:为什么它的行为与普通的调用setTimeout.bind()完全不同?setTimeout有人可以说明发生了什么吗?

4

0 回答 0