https://svelte.dev/repl/f8db4771ba794c658d7c25a6e72d1b46?version=3.18.1中的代码
有两个“反应变量”:
$: nameUpperCase = name.toUpperCase();
$: if (name === "city") {
console.log("RUNNING HERE 01", age);
} else {
console.log("RUNNING HERE 02", age);
}
如果值发生name
变化,那么nameUpperCase
也会发生变化。这很容易。
但是对于第二部分,似乎当name
or的值发生变化时,就会评估age
该行。if
如果从age
中删除console.log()
,如https://svelte.dev/repl/68c2cdea2bfd462caa5ac5519fb8b99d?version=3.18.1,那么是否age
更改都没关系。该if
行不被评估。
但是age
从不参与为if
语句生成任何最终值。它只是被打印出来,并且console.log
总是返回undefined
。那么规则是什么?不知何故,Svelte“神奇地”收集 之后的所有变量$:
,然后如果它们中的任何一个发生变化,则执行$:
?之后的行 所以即使变量不参与形成一些最终值,它仍然被考虑吗?