js高级程序设计中,一个有关垃圾回收机制的问题,对于书中给的例子不太理解。

新手上路,请多包涵

function createPerson(name){
    var localPerson = new Object();
    localPerson.name = name;
 }
 
var globalPerson = createPerson("Nicholas"); 
// 手工解除 globalPerson的引用
globalPerson = null;

以下是我的理解:

  1. 这个例子中,globalPerson的值被用null覆盖,手动解除了全局变量globalPerson的引用,所以只是接触了globalPerson对函数生成的对象的引用。
  2. 可此时createPerson函数虽然已经执行完毕,但仍然是可访达的。

以下是我的问题:

  1. createPerson函数执行完后,想要释放内存,是否需要手动删除引用?引用方式也是将函数名赋予null值吗?
阅读 1.2k
2 个回答

函数内的变量,只有在被return出去并被接受了才会保留(也就是存在闭包,且闭包被引用).否则函数执行完毕,其执行上下文就不可触达了,处于等待回收状态,只要GC开始,从全局对象往下捋,找不着它的上下文,就被清除了.

所以在当前案例中,你可以认为函数结束,它内部的变量就不存在了.

JS是有GC的语言,不需要特意管理内存.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题