在我的代码中,我正在try 做一个javascript练习.在第二行,我try 让ogTimeout存储对setTimeout函数的引用,因为我将为setTimeout重新分配一个新的定义.

但是我得到错误"ReferenceError:Cannot access 'setError' before initialization".我明白它说应该初始化setString,但它已经是一个现有的函数,所以我不明白是什么导致了错误.

感谢您的帮助,谢谢!

const timeouts = [];
const ogTimeout = setTimeout; 

let setTimeout = function(method, timeInMs) {
    const timeoutRef = ogTimeout(method, timeInMs);
    timeouts.push(timeoutRef);
}

const clearAllTimeouts = function() {
    while (timeouts.length) {
        const timeoutRef = timeouts.pop();
        clearTimeout(timeoutRef);
    }
}

setTimeout(() => console.log("Callback after 5 seconds."), 5000);

已try 搜索引用错误及其详细信息.

推荐答案

它说setTimeout应该被初始化,但它已经是一个现有的函数

不,它是您自己声明的let setTimeout,当const ogTimeout = setTimeout运行时它还没有初始化.在temporal dead zone秒期间访问它会导致此错误.

我将为setTimeout重新分配一个新的定义.

要覆盖全局setTimeout,请不要声明自己的变量.删除let,只写

setTimeout = function(method, timeInMs) {
    const timeoutRef = ogTimeout(method, timeInMs);
    timeouts.push(timeoutRef);
};

或者更明确地说,您还可以为全局window对象的属性赋值:

window.setTimeout = function(method, timeInMs) {
    const timeoutRef = ogTimeout(method, timeInMs);
    timeouts.push(timeoutRef);
};

顺便说一句,为了这个不破解任何代码,别忘了还要从你的函数中取return timeoutRef.

Javascript相关问答推荐

Next.js Next/Image图像隐含性有任何类型-如何修复?

如何解决CORS政策的问题

togglePopover()不打开但不关闭原生HTML popover'

在这种情况下,如何 for each 元素添加id?

如何添加绘图条形图图例单击角形事件

闭包是将值复制到内存的另一个位置吗?

基于props 类型的不同props ,根据来自接口的值扩展类型

元素字符串长度html

以编程方式聚焦的链接将被聚焦,但样式不适用

使用插件构建包含chart.js提供程序的Angular 库?

如何使本地html页面在重新加载时保持当前可隐藏部分的打开状态?

如何修复错误&语法错误:不能在纯react 项目中JEST引发的模块&之外使用导入语句?

在GraphQL解析器中修改上下文值

Reaction useState和useLoaderData的组合使用引发无限循环错误

如何使用[ModelJSON,ArrayBuffer]调用tf.loadGraphModelSync

在JavaScript中将Base64转换为JSON

谷歌饼图3D切片

如何在Highlihte.js代码区旁边添加行号?

如何缩小函数中联合返回类型的范围

如何格式化API的响应