• Почему не работает callback функция внутри slice()?

    Alexandre888
    @Alexandre888
    Javascript-разработчик
    почему моя callback стрелочная функция не возвращает 5-ку?


    термин «callback» никак не связан с текущим кодом, почитайте определение на learn.js

    - 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("..."))

    подразумеваю, что это тест возможностей языка
    Ответ написан
    2 комментария
  • Как работает рекурсия при встрече с return null?

    otdameskapizm
    @otdameskapizm
    Помог ответ? Отметь решением...
    Проще понять так: возьми
    return find(current + 5, `(${history} + 5)`) ||
                            find(current * 3, `(${history} * 3)`);


    Представь, что левый return - это левая ветка, а правый - правая. Сначала ты будешь проваливаться по левой ветке и дойдешь до 26, после этого у тебя вернется null так как 26 > 24. Предыдущий return, получив null прыгнет в правую часть условия (где у тебя все умножается на 3), но и там будет тоже null, так как 21 * 3 = 63 (что больше 24-х). Функция вернет тебя еще на уровень выше в правую ветку, так как из общей левой у тебя вернулся null. Ты пойдешь так "наверх", пока не встретишь условие, где будет 6 * 3 = 18. У тебя в сумме будет 19. И после этого ты войдешь опять в правую ветку, где будет 19 + 5, что даст тебе желанное 24 и выход из функции

    Постарался на пальцах объяснить

    А по поводу торможения. Рекурсия просто требует определенного времени, чтобы в нее "въехать".
    Ответ написан
    1 комментарий
  • Не могу сделать аналог вывода простых чисел. В чем проблема?

    Compolomus
    @Compolomus
    Комполом-быдлокодер
    чтоб разобраться как работают вложенные циклы попробуйте напечатать таблицу умножения как на тетрадке сзади, можете даже два варианта где 9 столбиков и где квадратная с цифрами 6376c3a03919f913389813.png
    ну а чтоб преобразовать цикл for в цикл while надо просто оставить середину из цикла for (условие выхода) в while, итератор вынести перед циклом (старт), инкримент поместить в тело цикла
    Ответ написан
    4 комментария
  • Не могу сделать аналог вывода простых чисел. В чем проблема?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Вы не учли, что оператор continue внутри цикла - это не просто переход, это выполнение очередного шага цикла с изменением счётчика.
    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;
    }
    Ответ написан
    5 комментариев
  • Не могу сделать аналог вывода простых чисел. В чем проблема?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Рабочий пример из учебника (с форматированием) хорош предсказуемостью циклов.
    Цикл 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 – нежелательны именно из-за вносимой путаницы.
    Ответ написан
    1 комментарий