Skip to content

Commit 3c155e3

Browse files
authored
fix: ensure effect cleanup functions are called with null this (#11024)
1 parent ad11c50 commit 3c155e3

File tree

5 files changed

+11
-4
lines changed

5 files changed

+11
-4
lines changed

.changeset/fuzzy-donuts-provide.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'svelte': patch
3+
---
4+
5+
fix: ensure effect cleanup functions are called with null `this`

packages/svelte/src/internal/client/reactivity/effects.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -244,7 +244,7 @@ export function destroy_effect(effect) {
244244
}
245245
}
246246

247-
effect.teardown?.();
247+
effect.teardown?.call(null);
248248

249249
if (effect.dom !== null) {
250250
remove(effect.dom);

packages/svelte/src/internal/client/runtime.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -391,7 +391,7 @@ export function execute_effect(effect) {
391391
destroy_effect_children(effect);
392392
}
393393

394-
effect.teardown?.();
394+
effect.teardown?.call(null);
395395
var teardown = execute_reaction_fn(effect);
396396
effect.teardown = typeof teardown === 'function' ? teardown : null;
397397
} finally {

packages/svelte/tests/runtime-runes/samples/effect-cleanup/_config.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,6 @@ export default test({
1515
flushSync(() => {
1616
b1.click();
1717
});
18-
assert.deepEqual(log, ['init 0', 'cleanup 2', 'init 2', 'cleanup 4', 'init 4']);
18+
assert.deepEqual(log, ['init 0', 'cleanup 2', null, 'init 2', 'cleanup 4', null, 'init 4']);
1919
}
2020
});

packages/svelte/tests/runtime-runes/samples/effect-cleanup/main.svelte

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,10 @@
88
99
log.push('init ' + double);
1010
11-
return () => {
11+
return function() {
1212
log.push('cleanup ' + double);
13+
// @ts-expect-error
14+
log.push(this);
1315
};
1416
})
1517
</script>

0 commit comments

Comments
 (0)