Как метки используются с операторами, которые не являются циклами? - PullRequest
8 голосов
/ 09 января 2012

Согласно спецификации ECMAScript 5.1 , раздел 12.12, любой оператор может быть помечен - и в кратком тесте мой браузер принял метку перед любым оператором.В спецификации также говорится, что метки используются исключительно с операторами break и continue, и быстрый тест показал, что эти операторы выдают ошибку «неопределенная метка», если метка, на которую они ссылаются, не ссылается на цикл, который их содержит.

Итак, мой вопрос таков: для чего используются метки для операторов, которые не являются циклами?Есть ли контекст, в котором break или continue могут ссылаться на метку, которая не является циклом?

Ответы [ 2 ]

6 голосов
/ 09 января 2012

Очевидно, что операторы break и continue могут использоваться в любом утверждении:

http://docstore.mik.ua/orelly/webprog/jscript/ch06_11.htm

В этом случае подобные вещи становятся законными:

function show_alert()
{
    label:
    {
        break label;
        alert("Hello! I am an alert box!");
    }
    alert("hi");
}

Когдаshow_alert () вызывается, отображается только предупреждение "hi".

Насколько я знаю, это единственное использование блоков кода {}, отличное от стиля кода.(здесь был вопрос об этом, и никто не мог придумать ничего, кроме читабельности, но я не могу найти это сейчас ...)

0 голосов
/ 10 августа 2013

Да, вы можете пометить любое утверждение. Вам просто нужно поместить выражение в фигурные скобки, т.е.

{start:var a=1;}

это не будет отображать неопределенную ошибку метки.

...