Замыкание 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