javascript - 如何手动清理由自调用函数创建的调用堆栈

标签 javascript callstack

(()=>{
    setTimeout(() => {
        // some function
    },3000);
})();

上面的代码在 for 循环内运行,我想要的是我应该能够阻止执行 setTimeout 调用堆栈,该调用堆栈在超时发生时执行并且应该能够清除它。

最佳答案

我假设您以这种方式执行了 IIFE,并且您想清除从 for 循环内部发出的超时:

for(let i=0; i< 4; i++){
    (()=>{
        setTimeout(() => {
            console.log("done");
        },3000);
    })();
}

在这种情况下,setTimeout() 返回一个 id,您可以使用它来清除发出的超时:

const arr = []
for(let i=0; i< 4; i++){
    (()=>{
        let id = setTimeout(() => {
            console.log("done");
        },3000);
        arr.push(id);
    })();
}
arr.forEach((id)=>clearTimeout(id)); //done not printed in console as timeout was cancelled

关于javascript - 如何手动清理由自调用函数创建的调用堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54490175/

相关文章:

javascript - 想要将 Javascript 中的值转换为 HTML 表单以提交到 Firebase 数据库

javascript - Jade 包括检查实际页面的条件

c - 直接访问函数栈

java - 检索方法或构造函数的调用者实例(不是类)

R: promise 已在评估中

assembly - 为什么DOS在加载.COM文件后将SP寄存器设置为0xFFFE?

javascript - 如何拆分后续数?

javascript - 根据下拉列表中的选择填充文本框

javascript - 闭包——常识?

c# - Visual Studio 2010 线程窗口中的 <Not Available> 和 [Thread Destroyed] 详细信息