我在做参考周期吗?

时间:2018-12-07 01:11:24

标签: javascript

在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检查器中这样做吗?

0 个答案:

没有答案