不像C语言,内存的管理是由程序员去控制的(析构函数),javascript的内存管理是托管的,系统的垃圾回收机制会帮助程序员作内存的管理,但并不是说这样做就没有内存泄露的危险了,js引擎的垃圾回收机制会将运行环境下所有不能及的变量标明“待回收”标志,等待回收。可是程序中也会存在死链接,试举一个小例子
从这段代码看到当A和B均已经释放掉了自己所占有的空间的时候,因为A仍然对Jim持有那份‘love ’(TMD,说的我自己的鸡皮疙瘩都出来了),所以它通过Man这个关联仍然是可达的,所以它的空间仍然被持有,并没有被释放,所以这就造成了内存泄露。
js 代码
- /**若girl A永远喜欢Jim,这种情况是有的,而girl B在Jim不喜欢她的情况下就放弃喜欢Jim ,
- * 我们讨论当girl C出现的时候,Jim放弃喜欢A and B,而去喜欢了C*/
- var Man= function (){
- this.name="Jim";
- this.behavior = function (){alert("Jim will not love A and B any more because C is coming...");}
- }
- var Girl_A=function (){
- this.name="A";
- this.boyFriend;
- this.behavior = function (parameter){
- this.boyFriend = new Man();
- alert("Love Jim forever");
- };
- }
- var Girl_B=function (){
- this.name="B";
- this.boyFriend;
- this.behavior = function (parameter){
- if(parameter){
- this.boyFriend = new Man();
- alert("Will not love Jim any more");
- }
- else{
- this.boyFriend=null;
- alert("Love Jim for he love me");
- }
- }
- }
- function main(){
- var man = new Man();
- man.behavior();
- var girl_a = new Girl_A();
- girl_a.behavior();
- var girl_b = new Girl_B();
- girl_b.behavior(true);/**表示B由外界因素知道Jim不再喜欢她这件事情是事实*/
- /**因为girl a and b 已经从这场"Love Battle"中退出了,所以将她们的空间释放掉*/
- girl_a= null;
- girl_b = null;
- }
从这段代码看到当A和B均已经释放掉了自己所占有的空间的时候,因为A仍然对Jim持有那份‘love ’(TMD,说的我自己的鸡皮疙瘩都出来了),所以它通过Man这个关联仍然是可达的,所以它的空间仍然被持有,并没有被释放,所以这就造成了内存泄露。