全局变量和局部变量内存消耗javascript

时间:2015-07-24 17:39:38

标签: javascript

我想知道javascript中全局变量和局部变量之间的更多区别。我听说过我的一个朋友,全局变量总是存储在内存中,甚至功能完成执行。但是,当函数开始执行时,局部变量存储在内存中,一旦执行完毕,就会从内存中删除。

如果这样,我怎样才能检查功能的内存消耗。

1 个答案:

答案 0 :(得分:4)

在JavaScript中,只要任何内容​​都引用了创建它们的上下文,变量就会保存在内存中。在全局变量的情况下,由于全局上下文具有对自身的引用,因此它们总是保留在内存中。

这意味着局部变量至少保留在内存中,直到它们返回的功能为止,此时它们有资格被回收,除非某些东西仍然有参考它们的创建环境。在这种情况下,它们无法回收,因为某些东西仍然可以使用它们。

这是一个局部变量的例子,当函数结束时肯定可以回收:

function foo(x) {
    var result = x * 2;
    return result;
}

这是一个局部变量的例子,当函数返回时,不能被回收,直到或除非它调用它释放它对返回值的引用:< / p>

function makeCounter() {
    var n = 0;

    function count() {
        return n++;
    }

    return count;
}

使用示例:

var c = makeCounter();
console.log(c()); // 0
console.log(c()); // 1
console.log(c()); // 2

在这种情况下,由于counter返回一个函数引用,而函数(count)引用了创建n的上下文,n不是只要count存在,就会回收。 count被称为闭包(它&#34;关闭&#34;调用makeCounter的上下文)。

更多: