Двоеточие в Javascript функции цикла - PullRequest
3 голосов
/ 14 марта 2012

Я копался в некоторых демонстрациях HTML5 Javascript и наткнулся на то, чего я никогда не видел в синтаксисе. Взгляните на функцию run и обратите внимание, как обозначение объекта search выполняется в цикле while . Интересующие линии включают 15 и 18. Кто-нибудь может объяснить этот синтаксис?

function run() {
  var n = 1;
  search: while (running) {
    n += 1;
    for (var i = 2; i <= Math.sqrt(n); i += 1)
      if (n % i == 0)
       continue search;
    // found a prime!
    postMessage(n);
  }
}

(код взят здесь; http://html5demos.com/js/cruncher.js)

Ответы [ 4 ]

5 голосов
/ 14 марта 2012

Это не объектная (буквальная) нотация, это , определяющая label.

A label может использоваться для присвоения циклической конструкции имени. Преимущество этого состоит в том, что вы можете создавать более мощные breaks; или continues;, ссылаясь на внешние циклы (по их меткам).

Обратите внимание , что структура программы, на которую вы ссылались, является:

search: while () {
   for (;;;) {

   }
}

... и автор использует continue search; внутри цикла for , чтобы продолжить выполнение цикла while.

Что касается того, что происходит в строке 18, if (n % i == 0) использует оператор по модулю (%) , чтобы получить остаток от деления n / i и проверки, равен ли он 0.

3 голосов
/ 14 марта 2012

search: - это метка в этом случае, которую можно использовать для ссылки на этот цикл.

Например, вы можете разорвать этот цикл, выполнив break search;

1 голос
/ 14 марта 2012

Поскольку никто не ответил на оба на ваши вопросы.

search: while, здесь search - это метка, которая помогает однозначно идентифицировать цикл while, который, как уже упоминалось, помогает при использовании break и / или continue во вложенных циклах.

Строка 18 (n % i ===0)

В основном ищет нечетное число, применяя оператор по модулю .

0 голосов
/ 14 марта 2012

Это метка, в основном используемая во вложенных циклах для прерывания / продолжения определенного цикла, отмеченного этой меткой. Это стандарт для каждого языка программирования, а не специфический для JavaScript. Подробнее читайте здесь в разделе «Использование меток для управления потоком»

http://www.tutorialspoint.com/javascript/javascript_loop_control.htm

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...