function Foo(){
var someObj = {
s: 'string'
}
console.log(someObj.s);
}
Foo(); // first call
Foo(); // second call
someObj
指向的内存会被覆盖还是会分配一个新的内存?如果将分配新内存,第一次调用时创建的 someObj
会发生什么,垃圾收集器会擦除它吗?我应该在函数外定义 someObj
以减少内存操作次数吗? 最佳答案
每次调用 someObj
都会创建一个新的 Foo
。您可以通过返回对象并查看新对象是否相等来检查这一点:
function Foo(){
var someObj = {
s: 'string'
};
return someObj;
}
console.log(Foo() === Foo());
它们不一样——第一个
someObj
指向的内存位置与第二个 someObj
指向的内存位置不同。如果您连续调用 Foo
而没有为 GC 运行留出时间,您最终会耗尽内存。如果对象没有返回,那么在
Foo
运行之后,没有其他东西可以引用 someObj
,所以它很快就会被 GC 处理。如果您想防止创建多个
someObj
,是的,可以在 someObj
之外定义 Foo
。如果您希望
someObj
只能在 Foo
内部引用,同时也只创建一个这样的对象,那么将 Foo
转换为 IIFE:const Foo = (() => {
var someObj = {
s: 'string'
};
return () => {
console.log(someObj.s);
};
})();
Foo();
关于javascript - 'var' 是否在重新访问或覆盖时分配新内存?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56324893/