我想知道javascript中全局变量和局部变量之间的更多区别。我听说过我的一个朋友,全局变量总是存储在内存中,甚至功能完成执行。但是,当函数开始执行时,局部变量存储在内存中,一旦执行完毕,就会从内存中删除。
如果这样,我怎样才能检查功能的内存消耗。
答案 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
的上下文)。