Закрытие работает только при назначении на новую переменную - Javascript - PullRequest
0 голосов
/ 22 мая 2018

Я начал узнавать о замыканиях, и, хотя я начинаю осваивать их, есть одна часть, которая не имеет смысла.

В приведенном ниже коде, когда я вызываю исходную функцию, addSomething(), вычисление не происходит, однако, когда я присваиваю эту функцию новой переменной var all = addSomething();, она тогда дает требуемый результатто есть он выполняет математические операции и возвращает 6 в консоли.

Может ли кто-нибудь объяснить две вещи:

1) Я делаю это правильно?

2) Почемувычисления выполняются только тогда, когда исходная функция назначена новой переменной?

Я нахожу эту часть очень запутанной.

function addSomething() {
  var a = 2,b = 4;
  
  function addIt() {
    var total = a + b;
    return total;
  }
  
  return addIt;
}

var all = addSomething();
console.log(all());

1 Ответ

0 голосов
/ 22 мая 2018

Это потому, что если вы упаковываете функции.Первый вызов возвращает функцию, а второй вызов возвращает фактическое значение.

Вы вызываете addSomething, который возвращает addIt, что является другой функцией.Вот почему вам нужен второй (), чтобы получить значение, возвращаемое addIt.

. В вашем подходе вы сохраняете возвращаемое значение addSomething (функция addIt) в переменной с именем all.all() == addSomething()()

function addSomething() {
  var a = 2,b = 4;
  
  function addIt() {
    var total = a + b;
    return total;
  }
  
  return addIt;
}

console.log(addSomething()());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...