diff --git a/packages/svelte/src/internal/client/dom/blocks/each.js b/packages/svelte/src/internal/client/dom/blocks/each.js index fe38ed892f..a03f1b316f 100644 --- a/packages/svelte/src/internal/client/dom/blocks/each.js +++ b/packages/svelte/src/internal/client/dom/blocks/each.js @@ -132,11 +132,13 @@ function pause_effects(state, to_destroy, controlled_anchor) { * @param {boolean} remove_dom */ function destroy_effects(state, to_destroy, remove_dom = true) { - /** @type {Set} */ - var preserved_effects = new Set(); + /** @type {Set | undefined} */ + var preserved_effects; // The loop-in-a-loop isn't ideal, but we should only hit this in relatively rare cases if (state.pending.size > 0) { + preserved_effects = new Set(); + for (const keys of state.pending.values()) { for (const key of keys) { preserved_effects.add(/** @type {EachItem} */ (state.items.get(key)).e); @@ -147,7 +149,7 @@ function destroy_effects(state, to_destroy, remove_dom = true) { for (var i = 0; i < to_destroy.length; i++) { var e = to_destroy[i]; - if (preserved_effects.has(e)) { + if (preserved_effects?.has(e)) { e.f |= EFFECT_OFFSCREEN; const fragment = document.createDocumentFragment();