gpt4 book ai didi

javascript - 当我清除数组时,数组内的 javascript 对象是否会从内存中删除?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:55:12 26 4
gpt4 key购买 nike

我从来没有真正考虑过垃圾回收,我不知道在制作小型 javascript 游戏/应用程序时是否有必要考虑。感谢任何建议,但我会在最后提出我的具体问题。

很多时候我写这种形式的代码:

var foos=new Array();
generateFoos();
function generateFoos()
{
foos=[];
for (fooIndex=0;fooIndex<numberOfFoos;fooIndex++)
{
foos[fooIndex]=new foo(Math.random(),Math.random());
}
}
function foo(bar,bas)
{
this.bar=bar;
this.bas=bas;
}

所以我的问题是,当我说 foos=[](第 5 行)时,这是否会从内存中删除该数组中的对象,或者它们会漂浮在某个地方,从而使程序更大并且慢点?如果我想多次调用 generateFoos(),就像每次用户按下一个键时,我应该怎么做。

谢谢!

最佳答案

对于一个特定的答案,由于被接受的答案实际上并没有直接回答问题,是的,foo = [] 确实取消引用了数组中的任何先前值。

正如 Ales 所说,“当一个对象变得不可访问时,它就有资格进行垃圾回收。”实际上,这是浏览器将从内存中清除此类内容的时候。

重要的一点,删除不会收集垃圾

你一遍又一遍地看到这一点,甚至在这个问题的评论中也是如此。 delete 关键字从对象中删除属性,与垃圾回收无关。

我还想就您的代码本身提供一些建议。

1) 对基本数据类型使用文字,而不是新的

2) 在声明之前不要调用函数。是的,它可以工作,但是它很乱而且以后更难阅读。请记住,您阅读代码所花费的时间远多于编写代码所花费的时间。方便以后跟进。

3) 记住你的功能范围。没有 var 声明的任何变量都是全局的。使用 var,它仍然在包含它的函数的范围内。变量在函数内的另一种方式是将它们作为命名参数传入。

4) 创建函数时在函数上使用 var。在您的代码中,您的函数是全局变量。

5) 使用间距。文字的密度不及虔诚。您现在可能 20 多岁,视力很好,但您会在短短几年内欣赏空白。

6) 在 for 循环中用 var 声明计数器。除非您希望它们是全局性的。而你几乎永远不会。

现在让我们重新编写您的代码:

var numberOfFoos = 10,
foos = [];

var generateFoos = function(){

foos = [];

for( var fooIndex = 0; fooIndex < numberOfFoos; fooIndex++ ){

foos[ fooIndex ] = new foo( Math.random(), Math.random() );

}

},

foo = function( bar, bas ){

this.bar = bar;
this.bas = bas;

}

generateFoos();
console.log( foos );

关于javascript - 当我清除数组时,数组内的 javascript 对象是否会从内存中删除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14226825/

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