像 <svelte:window on:keydown={handleKeydown}/> 组件这样的监听器是作用域还是全局的?

Mik*_*gan 3 svelte-3

如果我使用以下方法在组件内添加一个关键侦听器

<svelte:window on:keydown={handleKeydown}/>
Run Code Online (Sandbox Code Playgroud)

根据https://svelte.dev/tutorial/svelte-window,组件被销毁时侦听器是否会被删除?我想确保我不会造成任何类型的内存泄漏。

小智 7

是的,如果你愿意,你可以查看生成的 JS 代码,你会发现:

m(target, anchor) {
    dispose = listen(window, "keydown", /*handleKeydown*/ ctx[0]);
},
...
...
d(detaching) {
    dispose();
}
Run Code Online (Sandbox Code Playgroud)

m()方法是挂载函数,d()方法是销毁函数。您可以看到监听器被添加到 m() 中,然后在 d() 中被删除。这已被简化,但您可以通过研究 Svelte 源代码来了解更多信息:)

祝你好运!