gpt4 book ai didi

javascript - 'var'是重新访问时分配新内存还是覆盖?

转载 作者:搜寻专家 更新时间:2023-10-31 23:31:07 25 4
gpt4 key购买 nike

function Foo(){
var someObj = {
s: 'string'
}

console.log(someObj.s);
}

Foo(); // first call
Foo(); // second call

someObj 指向的内存会被覆盖还是分配新的内存?如果分配新内存,第一次调用时创建的 someObj 会发生什么,垃圾收集器会清除它吗?还是应该在函数外定义someObj来减少内存操作?

最佳答案

每次调用 Foo 时都会创建一个新的 someObj。您可以通过返回对象并查看新对象是否相等来检查这一点:

function Foo(){
var someObj = {
s: 'string'
};
return someObj;
}
console.log(Foo() === Foo());

它们不一样 - 第一个 someObj 指向的内存位置与第二个 someObj 指向的内存位置不同。如果您不断调用 Foo 而没有给 GC 运行留出时间,您最终会耗尽内存。

如果没有返回对象,那么在 Foo 运行后,没有其他东西可以引用 someObj,所以它很快就会被 GC。

如果你想防止创建多个 someObj,是的,可以在 Foo 之外随意定义 someObj

如果您希望 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com