JavaScript. Почему эта функция закрытия множителя работает?Javascript

Форум по Javascript
Ответить
Anonymous
 JavaScript. Почему эта функция закрытия множителя работает?

Сообщение Anonymous »

Я читаю 4-е издание книги "Eloquent JavaScript" и вижу следующий фрагмент кода:

Код: Выделить всё

function multiplier(factor) {
return number => number * factor;
}

let twice = multiplier(2);
console.log( twice(5) );
// → 10
Я читал о функциях замыкания и понимаю, что функции замыкания имеют доступ к своей собственной лексической среде (локальные переменные и параметры), а также к лексической среде своих родителей. С этим все в порядке.
Однако, что я не понимаю в предыдущей функции, так это то, почему она работает.
Я имею в виду, что при вызове multiplier( 2 ) я предполагаю, что «фактор» принимает значение 2 (но «число» не определено, верно? ), а полная функция multiplier возвращает «функцию тире»:

Код: Выделить всё

number => number * factor;
Этому последнему присваивается значение «дважды» («дважды» похоже на указатель на структуру функции, я прав?).
Позже, в console.log(twice(5)); я вызываю «дважды» с 5 в качестве аргумента, поэтому я снова предполагаю, что 5 обновит «фактор», а не «число».
Итак, чего я не вижу, так это того, почему в вызов, 5 обновляет «число», а не «фактор», потому что результат равен 10.
Я буду признателен за любые разъяснения или исправления моих предположений.

Подробнее здесь: https://stackoverflow.com/questions/798 ... tion-works
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»