javascript - 通过 setInterval/setTimeout 访问评估代码

标签 javascript

我想知道我是否可以做一些清理例程来自动获取超时/间隔。考虑一下:

var timeout = setInterval(function dimitar() {
    console.log("hi!");
}, 1000);

console.log(window);

我查看了窗口,但找不到任何对已传递函数的引用。果然,超时的引用就在那里。那么这个函数“存在”在哪里呢?它是否启动了 js 解释器的新实例来评估/运行/保留代码?如何根据超时 uid 访问它?

我知道我可以柯里化(Currying) setInterval 函数并让它始终将引用存储到一个数组中,然后我可以循环并清除该数组,但我很好奇是否有一种自然的方法来做到这一点

最佳答案

您在示例中创建的函数使用命名函数表达式。该名称仅在函数内可用。否则,它的行为与匿名函数相同:您尚未将其分配给变量,并且由于它不是函数声明,因此它不会在封闭范围内创建 dimitar 变量。以下文章可能有用:http://yura.thinkweb2.com/named-function-expressions/

没有发生任何eval类型的事情:您刚刚将对函数的引用传递给window.setInterval。此后无法检索此函数,除非您之前已将其分配给变量,或者它是对函数声明定义的函数的引用。

如果您想保留对该函数的引用,只需先将其存储在变量中即可:

var dimitar = function() {
    console.log("hi!");
};

window.setInterval(dimitar, 1000);

关于javascript - 通过 setInterval/setTimeout 访问评估代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2206802/

相关文章:

javascript - 深度嵌套的 JS 闭包

javascript - 在 Isotope.js 中加入多个复选框过滤器

javascript - EJS 噩梦——无法包含外部 View

javascript - Bootstrap 侧边栏和页脚无法正常工作

javascript - 在javascript中将函数分配给变量是否会运行该函数

javascript - 如何在react状态钩子(Hook)上使用map函数

javascript - 如何同时调用异步函数并等待所有回调?

javascript - 如何为 D3 圆圈包布局中的每个圆圈着色

javascript - 使用 Javascript 根据屏幕大小更改 <Video> src

javascript - 将数组作为参数传递给 SetTimeout 回调