我有一个关于JavaScript隐藏或隐形变量的问题。因为它们不是在全局上下文中创建的。当我们编写大型Web应用程序时,一些变量或函数不可分割,但我们不知道它们的存在。他们把我们的资源当作CPU,GPU。例如,我总是希望匿名函数中的所有变量在执行后都会被删除(当然,如果没有从上层上下文中引用它)。在这个例子中,我无法看到interval
变量,但它总是写入控制台interval
id。
(function () {
var interval = setInterval(function(){
console.log(interval.toLocaleString());
// some heavy operation
}, 1000);
})();
另一个例子是我在Backbone.js中创建了视图,然后我意识到在删除视图后,它也存在。 我的问题是,我如何找到或看到所有存在的变量,但在全局背景下不可见?
答案 0 :(得分:0)
请参阅以下两页:
https://developers.google.com/chrome-developer-tools/docs/heap-profiling
https://developers.google.com/chrome-developer-tools/docs/heap-profiling-containment
基本上,您需要快速拍摄堆并浏览其内容,以便在Chrome's developer tools中找到上下文变量。
- 函数上下文中的变量,可以通过函数闭包内部的名称访问;
您将能够通过颜色确定堆中哪些元素是上下文/闭包变量(请参阅Chrome开发工具底部的参考键?)。
答案 1 :(得分:-1)
setInterval()
实际上返回“interval”对象的intervalID
。这是一个整数。
var intervalID = window.setInterval(func, delay[, param1, param2, ...]);
var intervalID = window.setInterval(code, delay);
清除数据(并停止间隔)的唯一方法是使用.clearInterval
window.clearInterval(intervalID)
所以,发生的事情可能并不完全是你的想法。变量存在,但您的interval
变量只是intervalID
。