function createPerson(name){
var localPerson = new Object();
localPerson.name = name;
}
var globalPerson = createPerson("Nicholas");
// 手工解除 globalPerson的引用
globalPerson = null;
以下是我的理解:
- 这个例子中,globalPerson的值被用null覆盖,手动解除了全局变量globalPerson的引用,所以只是接触了globalPerson对函数生成的对象的引用。
- 可此时createPerson函数虽然已经执行完毕,但仍然是可访达的。
以下是我的问题:
- createPerson函数执行完后,想要释放内存,是否需要手动删除引用?引用方式也是将函数名赋予null值吗?
函数内的变量,只有在被return出去并被接受了才会保留(也就是存在闭包,且闭包被引用).否则函数执行完毕,其执行上下文就不可触达了,处于等待回收状态,只要GC开始,从全局对象往下捋,找不着它的上下文,就被清除了.
所以在当前案例中,你可以认为函数结束,它内部的变量就不存在了.
JS是有GC的语言,不需要特意管理内存.