Ответ 1
замыкание - это функция, связанная с одной или несколькими внешними переменными
Примером этого понятия является то, что функциональная панель привязана к внешним переменным x, y и z:
function foo(x, y) {
var z = 3;
return function bar(a, b, c) {
return (a + b + c) * (x + y + z);
};
}
var closure = foo(1, 2);
closure(5, 6, 7); // (5 + 6 + 7) * (1 + 2 + 3) = 24
Переменная closure
относится к внутренней функции bar
, возвращенной от вызова к foo
. Вызов closure
похож на повторное вхождение области в foo
, что дает видимость во всех локальных переменных и параметров foo
.
даже после того, как родительская функция завершила
Это означает, что после выполнения foo
возвращаемая функция, сохраненная в переменной closure
, сохраняется в состоянии foo
. Вы даже можете создать несколько независимых замыканий, снова вызвав foo
:
var closure = foo(1, 2);
closure(5, 6, 7); // (5 + 6 + 7) * (1 + 2 + 3) = 24
var closure2 = foo(0, 0);
closure2(5, 6, 7); // (5 + 6 + 7) * (0 + 0 + 3) = 21
/* closure2 does not affect the other closure */
closure(5, 6, 7); // (5 + 6 + 7) * (1 + 2 + 3) = 24