почему моя callback стрелочная функция не возвращает 5-ку?
- let result = str.slice(0, () => str.indexOf('Morning')) + paste
+ let result = str.slice(0, (() => str.indexOf('Morning'))()) + paste
- () => str.indexOf('Morning');
+ (() => str.indexOf('Morning'))();
.slice
, вы не вызвали её.str.slice(0, str.indexOf("..."))
return find(current + 5, `(${history} + 5)`) ||
find(current * 3, `(${history} * 3)`);
null
так как 26 > 24. Предыдущий return, получив null
прыгнет в правую часть условия (где у тебя все умножается на 3), но и там будет тоже null
, так как 21 * 3 = 63 (что больше 24-х). Функция вернет тебя еще на уровень выше в правую ветку, так как из общей левой у тебя вернулся null
. Ты пойдешь так "наверх", пока не встретишь условие, где будет 6 * 3 = 18. У тебя в сумме будет 19. И после этого ты войдешь опять в правую ветку, где будет 19 + 5, что даст тебе желанное 24 и выход из функцииlet i = 2;
nextPrime:
while (i <= 10) {
const limit = Math.sqrt(i);
let j = 2;
while (j <= limit) {
if (i % j === 0) {
j += 1;
i += 1;
continue nextPrime;
}
j += 1;
}
console.log(i);
i += 1;
}
for()
сходу устанваливает ограничения и следит за тем, чтобы на каждой итерации все эти i, j
увеличивались.while()
— опасный анархист. Легко впадает в бесконечный цикл, если в каком-то из условий забыть i = i + 1
Что у вас в последней попытке и присутствует:«Нет выхода», еслиbutthurt: while (i <= 10) { while (j < i) { alert('Внутренний цикл ' + j); if (i % j === 0) continue butthurt;
i % j === 0
: никто из них не поменяется и будет крутиться бесконечно.const LIMIT = 10;
let i = 2;
while (i <= LIMIT) {
let j = 2;
let isPrime = true;
while (j < i && isPrime) {
alert(`Внутренний: ${i} / ${j}`);
if (i % j === 0) isPrime = false; // делится, значит не простое
j++;
}
alert(`Внешний: ${i} - ${isPrime ? 'ПРОСТОЕ' : 'не простое'}`);
i++;
}
Отказался от меток циклов и от continue – нежелательны именно из-за вносимой путаницы.