Замыкание В JavaScript - это функция, содержащая в себе переменные из внешней области видимости. То есть она замыкает внешние переменные в себе.
Внутри функции A можно запустить функцию B которая может использовать переменные внешней функции A.
После выполнения функции ее внутренние переменные удаляются из памяти автоматически сборщиком мусора.
Но, если переменные внешней функции A используются во внутренней функции B, то переменные не удаляются.
JavaScript
// область видимости global
var a = 'Good morning';
function something()
{
// область видимости inner1
var b = 'inner1';
return function()
{
// область видимости inner2
return b; // замыкание . b берется из области видимости inner1
}
}
var myFunc1 = something();
myFunc1();
JavaScript
function sayHello()
{
// Локальная переменная, которая доступна только в замыкании
var hello = "Hello, world!";
var say = function()
{
console.log(hello);
}
return say;
}
var sayHelloClosure = sayHello();
sayHelloClosure();
// На экране увидим "Hello, world!"
Когда внутренняя функция ссылается на переменную из внешней функции, это называется замыканием
JavaScript
function foo(msg) {
var fn = function inner(){
return msg.toUpperCase();
};
return fn;
}
var helloFn = foo( "Hello!" );
helloFn(); // HELLO!