我正在做两个简单的测试,并在google devtools时间轴中对它们进行分析。
在函数外声明一个变量并在for循环中为它赋值一个似乎分配了大量内存并重复触发垃圾收集器。
另一方面,声明函数范围内的变量会分配更少的内存或根本没有内存
这是第一种情况:
(function() {
function createVars() {
var i;
var b;
for (i = 0; i < 10000; i += 1) {
b = Math.random();
}
requestAnimationFrame(createVars);
};
requestAnimationFrame(createVars);
}())
第二个:
(function() {
var b;
function createVars() {
var i;
for (i = 0; i < 10000; i += 1) {
b = Math.random();
}
requestAnimationFrame(createVars);
};
requestAnimationFrame(createVars);
}())
我本来期望相反或至少是类似的行为。
答案 0 :(得分:0)
可能的解释:局部变量存储在堆栈中,并且每次执行包含它们的函数后都会被删除。在函数外部定义的全局变量在堆上定义,并在每次执行后继续存在。此外,在每次执行时都会创建一个新变量,从而累积更多已用内存。
答案 1 :(得分:0)
首先,每次调用'createVars'时都会创建一个'b'变量。 第二种情况,您只使用一个变量。总是一样。 :)