Change of variable value in closure

1. What about variables in closures?

function makeCounter() {
    var i = 0;
    console.log(i);
    return function(){
        console.log(++i);
        console.log(i);
    };   
}

// Remember: `counter` and `counter2` both have their own variable `i`

var counter = makeCounter ();
counter();//1
counter();//2

makeCounter();

var counter2 = makeCounter ();
counter2();//1
counter2();//2




2. What is the order of asynchronous execution?

for (var i = 0; i < 5; ++i) {
  setTimeout(function () {
    console.log(i + ' ');
  }, 100);
}

for (var j = 5; j < 10; ++j) {
  setTimeout((function (num) {
    console.log(num + ' ');
  })(j), 100);
}

for (var k = 10; k <15; k ++) {
	
	(function(num){
		setTimeout(function () {
    		console.log(num + ' ');
  		}, 100);

	})(k);	
}

for (var n = 15; n < 20; n++) {
	
	add(n);
}

function add(num){
	setTimeout(function(){
		console.log(num);
	});
The output results are 5, 6, 7, 8, 9, 15, 16, 17, 18, 19, 5, 5, 5, 5, 5, 10, 11, 12, 13, 14

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325812509&siteId=291194637