Skip to content

Commit fb78f86

Browse files
committed
fix: ensure effect cleanup functions are called with null this
1 parent 0a16292 commit fb78f86

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
@@ -245,7 +245,7 @@ export function destroy_effect(effect) {
245245
}
246246
}
247247

248-
effect.teardown?.();
248+
effect.teardown?.call(null);
249249

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

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

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

393-
effect.teardown?.();
393+
effect.teardown?.call(null);
394394
var teardown = execute_reaction_fn(effect);
395395
effect.teardown = typeof teardown === 'function' ? teardown : null;
396396
} 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)