Здравствуйте друзья, только учу 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);
- Когда я пишу "return" после цикла, тогда выводит все последовательно, именно столько значений в столбик сколько я ввёл в prompt, а если в цикле самом пишу return, то выводит только одно первое значение "fizzbuzz".
- Если я напишу (i % 3 == 0 && i % 5 == 0) в конце условия, после i % 3 == 0 и % 5 == 0, то оно не выполняется, почему так происходит ? Выводятся только числа делимые на 3 и на 5 по отдельности, а если поставить (i % 3 == 0 && i % 5 == 0) в начало, то все работает, что здесь происходит ?
Ответы (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после цикла т.к. функция и так завершится :)Намного лучше переписать весь ваш громоздкий тернарный оператор в ветви
if.Вот как выглядит тернарный оператор:
условие ? если true : иначе falseПолучается когда вы пишите:
(i % 3 == 0 && i % 5 == 0) ? console.log("fizzbuzz") : ...;У вас если условие в круглых скобка выполняется, то выводится
fuzzbuzz, иначе рассматривается то, что после:. Вот по этому нет смысла в конец добавлять такое же условие :)