JavaScript:检测不可见变量

时间:2013-05-16 19:36:59

标签: javascript variables scope

我有一个关于JavaScript隐藏或隐形变量的问题。因为它们不是在全局上下文中创建的。当我们编写大型Web应用程序时,一些变量或函数不可分割,但我们不知道它们的存在。他们把我们的资源当作CPU,GPU。例如,我总是希望匿名函数中的所有变量在执行后都会被删除(当然,如果没有从上层上下文中引用它)。在这个例子中,我无法看到interval变量,但它总是写入控制台interval id。

(function () {      
    var interval = setInterval(function(){
        console.log(interval.toLocaleString());
        // some heavy operation
    }, 1000);
})();

另一个例子是我在Backbone.js中创建了视图,然后我意识到在删除视图后,它也存在。 我的问题是,我如何找到或看到所有存在的变量,但在全局背景下不可见?

2 个答案:

答案 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开发工具底部的参考键)。

enter image description here

答案 1 :(得分:-1)

setInterval()实际上返回“interval”对象的intervalID。这是一个整数。

来自Mozilla's site

var intervalID = window.setInterval(func, delay[, param1, param2, ...]);
var intervalID = window.setInterval(code, delay);

清除数据(并停止间隔)的唯一方法是使用.clearInterval

window.clearInterval(intervalID)

所以,发生的事情可能并不完全是你的想法。变量存在,但您的interval变量只是intervalID