gpt4 book ai didi

javascript - 闭包如何访问被破坏的变量?

转载 作者:行者123 更新时间:2023-11-30 16:54:06 24 4
gpt4 key购买 nike

当我学习创建对象的方法时,我发现了 Durable Constructor Pattern,它依赖于闭包和创建私有(private)变量的方法。

例如:

function Person(name, age, job){
var o = new Object();

o.sayName = function(){
alert(name);
};

return o;
}
var m = new Person('joe',20, 'anything');
m.sayName(); // 'joe'

name是私有(private)变量,只能被m.sayName访问。

我还知道,当函数完成执行时,垃圾收集器会进行内存扫描,以便释放所有局部变量。

所以我的问题是,m.sayName 如何访问 name,而它的内存在构造函数执行完毕后已被释放。

最佳答案

不,垃圾收集器只清理未被引用的变量。

闭包将 sayName 函数的引用添加到 Person 的执行上下文,这是引用 name 的范围。

只要 sayName 被引用,这个引用就会一直存在。在您释放 m(或直接释放 m.sayName)之前,该变量不会被丢弃。

闭包必须被视为从函数到创建它的范围的引用(这也是为什么闭包经常被指出是 JavaScript 中内存泄漏的常见原因之一)。该引用使得从内部函数访问创建作用域的变量成为可能(它们不是副本,这意味着两个内部函数共享相同的变量)。

对闭包范围的引用在您的代码中是隐藏的,但您可以使用开发人员工具看到它。这是我在 Chrome 中执行 console.dir(m) 时看到的内容:

enter image description here

关于javascript - 闭包如何访问被破坏的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30016745/

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