let n = 10;
nextPrime:
for (let i = 2; i <= n; i++) { // Для всех i...
for (let j = 2; j < i; j++) { // проверить, делится ли число..
if (i % j == 0) continue nextPrime; // не подходит, берём следующее
}
alert( i ); // простое число
Объясните принцип работы этого примера. Думал забью на него и дальше как нибудь разберусь, но перешел к функциям (следующ. теме) и снова встретил давнего врага.
Я написал сам что то подобное, и что тут не так?
let num = 90;
firstFor:
for(i = 8; i<num; i++) {
for (k = 2; k < i; k=+2) {
if(k === 12) break firstFor
}
console.log(i)
}
let n = 10;
nextPrime: for (let i = 2; i <= n; i++) { // Для всех i...
for (let j = 2; j < i; j++) { // проверить, делится ли число..
if (i % j == 0) {
continue nextPrime;
}
}
alert( i );
}
Что такое метка. Метка это способ переместиться либо в следующую итерацию цикла либо выйти из цикла. Синтаксически метка ставится перед циклом в виде ИМЯ_МЕТКИ: ТЕЛО ЦИКЛА. outerLoop: for (let i = 0; i < 10; i += 1) {console.log (i)}. continue ИМЯ_МЕТКИ переводит выполнение кода в начало цикла помеченного меткой. break ИМЯ_МЕТКИ прекращает выполнение цикла помеченного меткой.
Что такое простое число. Тут чтобы понять суть происходящего нужно освежить в памяти что такое простое число. Это которое делится на 1 и на само себя и более ни на что. Подход к решению - взять все числа от 2 до n, а потом проверить делится ли какое-то из них на нечто кроме самого себя. Если число делится только на само себя - значит оно простое.
Что происходит в коде примера. В нем описаны 2 цикла. Внешний цикл помечен меткой nextPrime. Внешний цикл бежит по натуральному ряду начиная с 2 (2, 3, 4, 5 …) чисел по n-ое число, и моделирует чисто которое будет проверяться на простоту. В переменной i записано значение из натурального ряда. Можно думать про i как про число-кандидата в простые. Внутренний цикл так же бежит по натуральному ряду чисел начиная с 2, но до i, и пытается поделить кандидата в простые значения на каждое значение от 2 до i. % операция которая дает значение остатка при делении левого значения на правое. Иначе говоря 2 % 3 вернет 2, 5 % 3 вернет 2, 8 % 2 вернет 0. Получается что если внутренний цикл дойдет до такого такого j, на которое i поделится без остатка i % j === 0, то число i не простое. Получается не имеет смысл продолжать итерировать, а нужно перейти к проверке следующего числа-кандидата. continue nextPrime перейдет к следующей итерации внешнего цикла. А вот если внутренний цикл завершился без перехода к верхнему, то выполнится код alert. То что внутренний цикл завершился без перехода к внешнему означает что i не смогло поделиться ни на одно от 2 до i, что и есть определение простого числа.
На практике метки почти никогда не нужны. Если не понимаешь их работы и твоя цель научиться писать программы, можно забить и двигаться дальше. Если же у тебя цель подготовиться к собеседованию, особенно на новичка-середнячка то метки стоит изучить на всякий случай.
На практике в 98% случаев когда мне нужно выйти из цикла не дожидаясь последней итерации я использую return. Разумеется, для этого фрагмент кода с циклом должен быть в функции.
Внутренний цикл получится бесконечным. Значение k не меняется потому что выражение k =+2 всегда записывает в k значение 2. Поменяй на += и заработает.
Подобные проблемы отлично отлавливаются с помощью отладчика, говоря ангилицзмом дебаггером. Вставляй debugger в ту строку где нужно интерпретатору остановиться, разберись со значением 3-4 кнопок (выполнить строку, выполнить скоуп, продолжить выполнение), и наслаждайся конкретными значениями переменных в любой момент в середи выполнения кода. В видео демке я пользуюсь кнопкой “выполнить следующее выражение” и “продолжить выполнение программы”. Вот так выглядит применение того что я описываю. Исполняемый код примера уже исправлен.

Спасибо. Очень помогли.
Спасибо, но еще кое что хочу спросить.
Вот i % j == 0. Что это значит? Если там будет написано !== 0.
Это четное/нечетное число?
Где при ==0 - четное - пропускаем итерацию и по новому кругу, где внешний цикл == 4 и внутренний 3?
и при !==0 - нечетное - спускаемся на alert