$: 是 Svelte 的响应式声明语法,用于定义依赖于响应式变量的自动更新逻辑;当其右侧引用的任何响应式值发生变化时,该语句会立即重新执行。
`$:` 是 svelte 的响应式声明语法,用于定义依赖于响应式变量的自动更新逻辑;当其右侧引用的任何响应式值发生变化时,该语句会立即重新执行。
在 Svelte(包括 SvelteKit)中,$: 并非解构赋值或普通 JavaScript 语法,而是一个编译时指令,它告诉 Svelte 编译器:“这段代码需要被监控,并在所依赖的响应式变量变更时自动重运行”。
例如:
<script>
let data = { session: null, supabase: {}, profile: {} };
// ✅ 正确:使用 $: 创建响应式解构
$: ({ session, supabase, profile } = data);
// ✅ 等价写法(更清晰体现响应式逻辑)
$: {
console.log('data updated:', data);
// 可执行多条语句,如格式化、校验、派生计算等
}
// ✅ 响应式计算属性(推荐用于派生值)
$: isLoggedIn = session?.user !== undefined;
$: displayName = profile?.name || 'Anonymous';
</script>⚠️ 注意事项:
- $: 不能用于 const 声明(因 const 不可重赋值),但可用于 let 变量的赋值或代码块;
- $: 语句仅对顶层 <script> 中的变量有效</script>,函数内部或嵌套作用域中无效;
- 它不触发 DOM 更新,但会同步更新 JS 变量和逻辑;若需影响视图,请确保这些变量在模板中被引用(如 {isLoggedIn});
- 避免在 $: 中执行副作用(如 fetch、localStorage.setItem),除非明确需要每次依赖变更都触发——建议封装为 onMount + subscribe 或使用 derived store。
? 总结:$: 是 Svelte 实现细粒度响应式的基石之一,比 watch 更轻量、比 computed 更灵活。它让开发者以接近自然 JavaScript 的方式表达“当 X 变化时,执行 Y”,是构建高效、可维护 Svelte 应用的关键语法。

















