В чем разница между return и console.log()

Я получаю разные результаты, когда использую console.log() в своей функции, и когда использую оператор return.

Когда я запускаю функцию с оператором return, я получаю вывод из одного слова, который является одним из следующих: «fizz» «buzz» или «fizzbuzz», но когда я запускаю функцию с помощью console.log, вывод подсчитывается до предела и говорить «шипение», «жужжание» или «шипение» всякий раз, когда встречается число, кратное 3, 5 или обоим / почему это так?

input = fizzBuzz(100)
console.log(input)

function fizzBuzz(limit){
    for (let i = 0; i <= limit; ++i)
    if (i % 3 === 0 && i % 5 === 0) 
    console.log('fizzbuzz')
    else if (i % 3 === 0)
    console.log('fizz')
    else if (i % 5 === 0)
    console.log('buzz')
    else console.log(i)
}


input = fizzBuzz(100)
console.log(input)

function fizzBuzz(limit){
    for (let i = 0; i <= limit; ++i) {
        if (i % 3 === 0 && i % 5 === 0)
            return 'fizzbuzz'
        else if (i % 3 === 0)
            return 'fizz'
        else if (i % 5 === 0)
            return 'buzz'
        else return i
    }
}

Я думаю, это потому, что оператор return останавливает выполнение функции дальше, но я не уверен, все еще новый и самообучающийся!


person jq712    schedule 01.02.2019    source источник
comment
Возможный дубликат Разница между console.log и return в javascript?   -  person Andreas    schedule 01.02.2019


Ответы (4)


return оценивает свой аргумент (если он указан) и немедленно завершает выполнение содержащей его функции.

console.log оценивает свой аргумент и печатает его, продолжая выполнение функции, из которой он вызывается.

Итак, в вашем примере с return тот факт, что вы находитесь в цикле for, который проходит limit раз, не имеет значения, потому что вы пройдете его только один раз и return из fizzBuzz.

Собираем все это вместе с другим примером:

function print_dog() {
  console.log('dog');
  return;
  console.log('cat');
}

Если вы затем вызовете print_dog(), вы увидите вывод dog, но вы не увидите вывод cat, потому что return завершает выполнение print_dog до того, как он достигнет console.log('cat');.

person Dave Morse    schedule 01.02.2019

Вы правы, утверждая, что это потому, что оператор return выходит из функции.

Это также относится к python, java и многим другим языкам.

Ваше здоровье!

person Greg    schedule 01.02.2019
comment
Как ты можешь говорить, что это единственная разница? Если метод что-то возвращает, возвращаемое значение можно использовать позже. Если метод печатает что-то на консоли, нет возможности использовать напечатанное значение где-либо еще. - person quirimmo; 01.02.2019
comment
Технически программный вывод можно использовать в другом месте, например, в канале bash или перенаправлении вывода. При этом вы правы - между возвратом и отпечатком определенно есть разница. - person Greg; 01.02.2019

Вот что делает каждая отдельная функция:

function fizzBuzz(limit) {
    for (let i = 0; i <= limit; ++i)
        if (i % 3 === 0 && i % 5 === 0)
            console.log('fizzbuzz')
        else if (i % 3 === 0)
            console.log('fizz')
        else if (i % 5 === 0)
            console.log('buzz')
        else console.log(i)
}

Это повторяется до limit и console.logs результата теста FizzBuzz каждый раз.

function fizzBuzz(limit){
    for (let i = 0; i <= limit; ++i) {
        if (i % 3 === 0 && i % 5 === 0)
            return 'fizzbuzz'
        else if (i % 3 === 0)
            return 'fizz'
        else if (i % 5 === 0)
            return 'buzz'
        else return i
    }
}

Это повторяется до limit и возвращает одно значение из функции — результат теста FizzBuzz на первой итерации.

Таким образом, одна функция записывает все результаты FizzBuzz в консоль, а другая возвращает один результат FizzBuzz, который вы записываете в консоль вручную.

person Jack Bashford    schedule 01.02.2019

Да, вы мыслите в правильном направлении.

Оператор return в функции вернет значение и остановит дальнейшее выполнение. Где Console.log() — это функция, создающая побочный эффект, которая будет печатать переданные ей аргументы в консоли.

Наличие console.log() внутри функции похоже на вызов функции внутри функции.

person Krantisinh    schedule 01.02.2019