gpt4 book ai didi

javascript - Next tick override functionality does 函数将被调用

转载 作者:搜寻专家 更新时间:2023-10-31 22:45:17 25 4
gpt4 key购买 nike

我需要重写下面的代码

这里的函数会在下一次tick执行

req.nextTick = typeof setTimeout !== 'undefined' ? function (fn) {
setTimeout(fn, 5);
} : function (fn) { fn(); };

有了这个,

window.require.nextTick = function(fn) { fn(); };

由于函数会被立即调用,在这种情况下,它不会在下一次报价时执行吗?

最佳答案

if I change the code to the second option whethaer It will be problematic and if yes why???

我不建议进行该更改,因为一般来说它可能会出现问题。 require.nextTick 的文档(出现在函数定义之前)说:

Execute something after the current tick of the event loop.

同步调用 fn 违反了应在“当前报价之后”执行的规范。 (请在此处查看我的回答的结尾以了解可能的反对意见。)

如果您想知道为什么这可能是一个问题,请考虑 RequireJS 监听 DOM 事件。像 require.nextTick 这样的函数所做的一件事是让事件处理程序有机会运行。如果您将 require.nextTick 设置为同步执行其功能,那么您就没有机会让事件处理程序运行。在某些情况下,这可能会导致 RequireJS 停止正常工作。

此时,有人可能会反对 nextTick 的定义,让它同步调用 fn 是可以的,因为如果 setTimeout 未定义,则它会同步调用 fn:

req.nextTick = typeof setTimeout !== 'undefined' ? function (fn) {
setTimeout(fn, 4);
} : function (fn) { fn(); };

我认为这是针对异常情况,而不是通过 HTTP 请求异步加载模块的常规情况。在某些情况下,比如可能缺少浏览器或 Node.js 提供的 JS 环境的嵌入式设备,执行使用 RequireJS 的软件的唯一方法是加载经过优化的包 r.js 并在包中包含 require.js在这种情况下,让 nextTick 同步调用 fn 是没有实际意义的,因为在 RequireJS 执行时,所有模块都已经加载.

关于javascript - Next tick override functionality does 函数将被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34587915/

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