Здравствуйте друзья, только учу JavaScript, мне немного непонятны некоторые моменты, помогите пожалуйста

function getFizzBuzz(num) {
    for(let i = 0; i < num; i++) {
         (i % 3 == 0 && i % 5 == 0) ? console.log("fizzbuzz") : (i % 5 == 0) ? console.log("buzz") : (i % 3 == 0) ? console.log("fizz") : console.log(i);
       }   
       return;
   }
let num = +prompt("Please, write some number: ", 0);
getFizzBuzz(num);
  1. Когда я пишу "return" после цикла, тогда выводит все последовательно, именно столько значений в столбик сколько я ввёл в prompt, а если в цикле самом пишу return, то выводит только одно первое значение "fizzbuzz".
  2. Если я напишу (i % 3 == 0 && i % 5 == 0) в конце условия, после i % 3 == 0 и % 5 == 0, то оно не выполняется, почему так происходит ? Выводятся только числа делимые на 3 и на 5 по отдельности, а если поставить (i % 3 == 0 && i % 5 == 0) в начало, то все работает, что здесь происходит ?

Ответы (1 шт):

Автор решения: Павел Ериков
  1. Оператор return в вашем случае ничего не возвращает, а просто сразу выходит из функции. Вот по этому у вас выводится одно значение, а потом попадает на return и функция завершается.

    Например:

    function getFizzBuzz(num) {
    for(let i = 0; i < num; i++) {
         //Выводим в консоль "fuzzbuzz" если условие выполняется
         (i % 3 == 0 && i % 5 == 0) ? console.log("fizzbuzz") : ...;
         return; //выходим из функции
       }   
       return; //Если писать return тут, то мы дождемся сначала
       //завершение цикла, а потом сделаем выход из функции
    }
    

    В вашем случае, даже не требуется писать return после цикла т.к. функция и так завершится :)

  2. Намного лучше переписать весь ваш громоздкий тернарный оператор в ветви if.

    Вот как выглядит тернарный оператор:

    условие ? если true : иначе false 
    

    Получается когда вы пишите:

    (i % 3 == 0 && i % 5 == 0) ? console.log("fizzbuzz") : ...;
    

    У вас если условие в круглых скобка выполняется, то выводится fuzzbuzz, иначе рассматривается то, что после :. Вот по этому нет смысла в конец добавлять такое же условие :)

→ Ссылка