我想知道我是否可以做一些清理例程来自动获取超时/间隔。考虑一下:
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/