Замыкание Javascript
by Hellfrom
JavaScript
//window = { a: undefined, createCounter: function(){}, iterator: undefined}
var a = 1;
//window = { a: 1}
function b(){
//LexialEnvironent {c: undefined};
var c = 2;
//LexialEnvironent {c: 2};
console.log(a); //ERROR
}
function d(foo){
//LexialEnvironent {foo: function (){}, a: undefined};
var a = 1222;
//LexialEnvironent {foo: function (){}, a: 1222};
foo();
}
d(b);
function createCounter(){
//LexialEnvironent {i: undefined, closure: function(){}};
var i = 0;
//LexialEnvironent {i: 0, closure: function(){}};
return function closure(){
//LexialEnvironent
i++;return i;
}
}
var iterator = createCounter(); //closure
//window = { a: 1, createCounter: function(){}, iterator: closure}
console.log(iterator()); //1
console.log(iterator()); //2
console.log(iterator()); //3