2

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

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

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

4

2 回答 2

0

请参阅这两页:

https://developers.google.com/chrome-developer-tools/docs/heap-profiling

https://developers.google.com/chrome-developer-tools/docs/heap-profiling-containment

本质上,您需要对堆进行快照并浏览其内容以在Chrome 的开发人员工具中找到上下文变量

— 函数上下文中的变量,可从函数闭包内部通过其名称访问;

您将能够通过颜色确定堆中的哪些元素是上下文/闭包变量(请参阅?Chrome 开发工具底部的参考键)。

在此处输入图像描述

于 2013-05-24T12:17:02.793 回答
-1

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

来自Mozilla 的网站

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

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

window.clearInterval(intervalID)

因此,正在发生的事情可能与您所想的并不完全一样。该变量存在,但您的interval变量只是intervalID.

于 2013-05-17T19:00:53.027 回答