We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
There was an error while loading. Please reload this page.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
WeakMap について1つ目の例はなかなかわかりにくいと思います(一応初心者の私にとっては)。
// eventTargetの参照が変われば自動的にイベントリスナーが解放される eventTarget = null;
この二行のコードの說得力はちょっと弱いと思います。eventTarget を null にして後一体どんなことがあったのかもっと具体的に説明すればいいと思います。
eventTarget
null
ちょっとネットの上で調べると、この例 ruanyf/es6tutorial#362 (comment) を見つけた(heapUsed の値が変わった)。よりわかりやすいではと思いますので、此処に貼ります。
heapUsed
The text was updated successfully, but these errors were encountered:
WeakMap 1番目の例から少し具体的すぎるのが、わかりにくさの原因なようにも見えますね もっと基本的なMapとWeakMapでの動作の違い(自動的に開放されない例)を出せるとよさそうですね。 (eventTargetは2番目の例にする感じで)
const obj = { key: {} }; const map = new WeakMap(); map.set(obj.key, 1); console.log(map.get(obj.key)); delete obj.key; // ここで obj.key が消された = どこからも参照されなくなった(WeakMapはweakな参照なので例外的) = JavaScriptエンジンはGCで解放してよくなった => WeakMapで参照してた場合は参照できなくなって undefinedになる というのを説明する console.log(map.get(obj.key));
JavaScriptにgc関数はないので、gc関数なしで観測しやすい例があるとわかりやすくなるような気がします。
gc
関連:
Sorry, something went wrong.
わかりますけど
delete obj.key; console.log(map.get(obj.key));
この例も問題があると思います。 obj.key は既に delete されちゃったので、当然 obj.key を再びアクセスするときには undefined になちゃう。なので、 console.log(map.get(obj.key)) => console.log(map.get(undefined)) になる。 WeakMap にかかわらず、最初から const map = new Map() にするのも同じ結果を得るのではないかと思います。
obj.key
delete
undefined
console.log(map.get(obj.key))
console.log(map.get(undefined))
WeakMap
const map = new Map()
gc関数なしで観測しやすい例を提出するのはなかなか難しいよね。
#654 で修正しました
lacolaco
No branches or pull requests
該当ページ
質問内容
WeakMap について1つ目の例はなかなかわかりにくいと思います(一応初心者の私にとっては)。
この二行のコードの說得力はちょっと弱いと思います。
eventTarget
をnull
にして後一体どんなことがあったのかもっと具体的に説明すればいいと思います。ちょっとネットの上で調べると、この例 ruanyf/es6tutorial#362 (comment) を見つけた(
heapUsed
の値が変わった)。よりわかりやすいではと思いますので、此処に貼ります。The text was updated successfully, but these errors were encountered: