Skip to content

Commit fe6e4e2

Browse files
fix: avoid hoisting error by using 'let' instead of 'var' (#11291)
Fixes #11284
1 parent 05ac8f4 commit fe6e4e2

File tree

4 files changed

+29
-3
lines changed

4 files changed

+29
-3
lines changed

.changeset/plenty-starfishes-dress.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"svelte": patch
3+
---
4+
5+
fix: avoid hoisting error by using 'let' instead of 'var'

packages/svelte/src/internal/client/dom/elements/attributes.js

+4-3
Original file line numberDiff line numberDiff line change
@@ -111,16 +111,17 @@ export function set_attributes(element, prev, next, lowercase_attributes, css_ha
111111
var events = [];
112112

113113
for (key in next) {
114-
var value = next[key];
114+
// let instead of var because referenced in a closure
115+
let value = next[key];
115116
if (value === prev?.[key]) continue;
116117

117118
var prefix = key[0] + key[1]; // this is faster than key.slice(0, 2)
118119
if (prefix === '$$') continue;
119120

120121
if (prefix === 'on') {
121122
/** @type {{ capture?: true }} */
122-
var opts = {};
123-
var event_name = key.slice(2);
123+
const opts = {};
124+
let event_name = key.slice(2);
124125
var delegated = DelegatedEvents.includes(event_name);
125126

126127
if (
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { test } from '../../test';
2+
3+
export default test({
4+
async test({ assert, target }) {
5+
const input = target.querySelector('input');
6+
7+
input?.dispatchEvent(new Event('input', { bubbles: true }));
8+
9+
await Promise.resolve();
10+
11+
assert.htmlEqual(target.innerHTML, 'true <input class="hello">');
12+
}
13+
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<script lang="ts">
2+
const props = {};
3+
let changed = $state(false);
4+
</script>
5+
6+
{changed}
7+
<input {...props} oninput={() => (changed = true)} class="hello" />

0 commit comments

Comments
 (0)