• Почему рекурсивную функцию нужно присваивать переменной при работе с декоратором?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    У вас декоратор не возвращает значение декорируемой функции.
    В первом случае это приводит к тому, что при рекурсивном вызове fac() в строке return num * fac(num - 1) выполняется умножение на undefined.
    Во втором случае вы рекурсивно вызываете незадекорированную функцию fac(), поскольку декорируете fuc().
    Ответ написан
    3 комментария
  • Когда лучше использовать рекурсивный setTimeout?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    В вашем коде всегда есть ненулевой шанс наличия ошибки (бага).
    • Рекурсивный setTimeout лучше тогда, когда ошибка должна приводить к остановке выполнения кода, то есть к отказу от дальнейших попыток его выполнить.
    • Обычный setInterval лучше тогда, когда код должен продолжать попытки выполниться, не смотря на ошибку.

    В остальном разницы почти нет. Если повторов слишком много, то setInterval предпочтительней, чтобы сократить количество перерегистраций вашей функции.

    Также рекурсивный setTimeout может быть интересен, если величина задержки не является константой, то есть каждый раз будет меняться.
    Ответ написан
    1 комментарий