В чем разница между return и console.log () - PullRequest
0 голосов
/ 01 февраля 2019

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

Когда я запускаю функцию с оператором return, я получаю вывод на одно слово, равноеиз следующего: «fizz», «buzz» или «fizzbuzz», но когда я запускаю функцию с помощью console.log, результат подсчитывается до предела и говорит «fizz», «buzz» или «fizzbuzz» всякий раз, когда встречаетсяиз 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 не дает функции выполнять что-либо еще, но я не уверен, все еще нова и самоучка!

Ответы [ 4 ]

0 голосов
/ 01 февраля 2019

Да, вы думаете о правильных линиях.

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

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

0 голосов
/ 01 февраля 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.log s - результат теста 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, который вы регистрируете на консоли вручную.

0 голосов
/ 01 февраля 2019

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');

0 голосов
/ 01 февраля 2019

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

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

Cheers!

...