Я только что просматривал источник JSLint и заметил этот фрагмент кода:
// Is this a labeled statement?
//...
if (next_token.labeled !== true || funct === global_funct) {
stop('unexpected_label_a', label);
} //...
Интересной частью является funct === global_funct
сравнение. Запуск следующего фрагмента через JSLint выдает ошибку «Неожиданная метка», поскольку оператор с меткой находится в глобальном контексте выполнения (. Я знаю, это глупый пример. Вот скрипка .):
loop:
for (var i = 0; i < 10; i++) {
if (i === 5) {
break loop;
}
}
Если вы поместите тот же фрагмент в функцию, JSLint вполне им доволен и не выдаст ошибку, когда встретит метку. Вот скрипт с кодом, который будет передавать JSLint. Код можно вставить в онлайн-версию JSLint , если вы хотите попробовать.
Итак, мой вопрос :есть ли что-то неправильное в использовании помеченного оператора в глобальном коде, или это просто еще один личный выбор Крокфорда?