4
我在使用JavaScript弱点映射时,在谷歌浏览器开发人员控制台中尝试此代码后,运行时使用--js-flags =“ - expose-gc”,我不明白为什么如果a被gc化了,那么弱映射就继续引用ab。JavaScript WeakMap继续引用gc'ed对象
var a = {listener: function(){ console.log('A') }}
a.b = {listener: function(){ console.log('B') }}
var map = new WeakMap()
map.set(a.b, [])
map.set(a, [a.b.listener])
console.log(map) // has both a and a.b
gc()
console.log(map) // still have both a and a.b
a = undefined
gc()
console.log(map) // only have a.b: why does still have a reference to a.b? Should'nt be erased?
这看起来像一个bug给我。如果你多次使用gc(),它会持久吗?如果是这样,那么你应该用V8报告它。 – Bergi