JavaScript обладает относительно неизвестной функциональностью, которая позволяет вам помечать операторы.
Недавно я видел, как эта функция использовалась в Svelte для включения реактивных объявлений, которые пересчитываются всякий раз, когда переменные, объявленные в инструкции, изменяются:
$: console.log(variable)
Они также позволяют использовать блок операторов , еще одну функцию JavaScript, которая позволяет определять блок всякий раз, когда вы можете определить оператор:
$: {
console.log(variable)
console.log('another thing')
//...
}Это может показаться странным, но это правильный JavaScript. Этот блок инструкций присваивается метке $ |/ .
Компилятор Svelte внутренне будет использовать это для включения реактивных объявлений.
Я никогда не использовал эту функцию где-либо еще, но основной вариант использования – это выход из оператора, который не является ближайшим замкнутым циклом или переключателем.
Вот простой пример, чтобы объяснить, что я имею в виду.
Вызов прерывания в любой из этих точек прерывается из коммутатора, чтобы избежать запуска других случаев:
for (let y = 0; y < 3; y++) {
switch (y) {
case 0:
console.log(0)
break
case 1:
console.log(1)
break
case 2:
console.log(2)
break
}
}Это приведет к печати 0 1 2 к пульту, как и ожидалось.
Но что, если мы захотим вырваться из для , когда достигнем случая 1 ? Вот как это делается:
loop: for (let y = 0; y < 3; y++) {
switch (y) {
case 0:
console.log(0)
break
case 1:
console.log(1)
break loop
case 2:
console.log(2)
break
}
}Это приведет к печати 0 1 к пульту.
Оригинал: “https://flaviocopes.com/javascript-labeled-statements/”