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

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