В javascript, почему это отображается, когда я использую console.log, но не когда я возвращаюсь - PullRequest
1 голос
/ 26 мая 2020

Довольно новый для Javascript, так что постарайтесь не атаковать слишком много :). Вот проблема, которую я пытаюсь решить. Когда я console.log это, он возвращает то, что я ищу, но когда я заменяю console.log на return, он ничего не возвращает. Может кто-нибудь поможет прояснить? Спасибо.

Моя задача:

Напишите функцию callTimes, которая возвращает новую функцию. Новая функция должна возвращать количество вызовов, которые она вызывалась.

function callTimes() {
  let count = 0;
  return function inner(){
    count++;
    console.log(count)
  }
  return inner
}

let myNewFunc1 = callTimes();
let myNewFunc2 = callTimes();
myNewFunc1(); // => 1
myNewFunc1(); // => 2
myNewFunc2(); // => 1
myNewFunc2(); // => 2

Если я сделаю то же самое, но заменю console.log на return, он ничего не вернет. Пытаюсь понять, почему:

function callTimes() {
  let count = 0;
  return function inner(){
    count++;
    return count
  }
  return inner
}

let myNewFunc1 = callTimes();
let myNewFunc2 = callTimes();
myNewFunc1(); // => 1
myNewFunc1(); // => 2
myNewFunc2(); // => 1
myNewFunc2(); // => 2
//Output should be the same as above... 
//but nothing logged

1 Ответ

1 голос
/ 26 мая 2020

Во втором примере числа возвращены правильно, но они не отображаются в консоли.

Это потому, что return не записывать что-нибудь. return является частью языка, а не инструментом отладчика.

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

Итак, чтобы увидеть эти значения в консоли, запишите их после того, как они ' повторно возвращено:

function callTimes() {
  let count = 0;
  return function inner(){
    count++;
    return count //<--Return instead of logging
  }
  return inner
}

let myNewFunc1 = callTimes();
let myNewFunc2 = callTimes();
//Log the returned values
console.log(myNewFunc1()); // => 1
console.log(myNewFunc1()); // => 2
console.log(myNewFunc2()); // => 1
console.log(myNewFunc2()); // => 2
...