在JavaScript中,在范围内定义函数时,它们是否在外部范围内保持对变量的强引用?抱歉,我不确定如何正确地询问这个问题。
下面的代码可能是一个更好的解释:
var map = new Map();
function addToMap(id, data) {
map.set(id, data);
Object.defineProperty(data, "$$self", {
enumerable: false,
configurable: true,
get: function() {
// Am I creating a ref cycle here?
return map.get(id);
},
});
}
function init() {
var data = { name: "data" };
addToMap(1, data);
data.$$self; // NOTE: "run" the getter somehow
}
init();
map.delete(1);
data
是否要发布?
现在(或者更确切地说,在垃圾回收之后)是否存在泄漏?
data
是否强烈引用map
?
我该如何测试或检查是否可能发生泄漏?我可以在Web检查器中这样做吗?