gpt4 book ai didi

javascript - MyFunction() 与 window.setTimeout ('MyFunction()',0)?

转载 作者:可可西里 更新时间:2023-11-01 01:50:09 26 4
gpt4 key购买 nike

在 javascript 中,这两者之间有什么不同吗:

// call MyFunction normal way 

MyFunction();

// call MyFunction with setTimeout to 0 //

window.setTimeout('MyFunction()', 0);

之所以问,是因为最近遇到这样的情况,只有用setTimeout(0)调用函数,代码才能生效。据我了解,setTimeout(0) 与直接调用函数完全相同,因为您没有设置任何延迟。但是从我看到它在代码中的工作方式来看,setTimeout(0) 似乎是最后执行的。

有人能准确说明 setTimeout(0) 是如何按照其他函数调用的顺序调用的吗?

最佳答案

setTimeout()总是导致 JavaScript block 排队等待执行。这是何时执行的问题,由提供的延迟决定。延迟为 0 调用 setTimeout(),将导致 JavaScript 解释器意识到它当前正忙(正在执行当前函数),并且解释器将在当前调用堆栈为空时安排要执行的脚本 block (除非有是其他也在排队的脚本 block )。

调用堆栈变空可能需要很长时间,这就是您看到执行延迟的原因。这主要是由于 JavaScript 在单窗口上下文中的单线程特性。

为了完整起见,MyFunction() 将立即执行函数。无需排队。

附言:John Resig has some useful notes on how the JavaScript timing mechanism works .

PPS:只有当您使用 setTimeout(fn(),0) 时,您的代码才“似乎工作”的原因是因为浏览器只能在当前调用堆栈完成时更新 DOM .因此,下一个 JavaScript block 将识别 DOM 更改,这在您的情况下是很有可能的。 setTimeout() 回调总是创建一个新的调用堆栈。

关于javascript - MyFunction() 与 window.setTimeout ('MyFunction()',0)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1360238/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com