javascript闭包、变量提升

一、add(2)(3)求和函数(闭包)

1 function add(x) {
2     var a = x;
3     return function(b) {
4         sum = a + b;
5         console.log(sum);
6     }
7 }
8 add(2)(3);        //5

二、变量提升

 1 //第一种情况
 2 
 3 var a = 100; //全局变量
 4 
 5 function test() {
 6     alert(a);        //向上搜索全局变量 -->100
 7     a = 10;          //没有var修饰,所以a为全局变量,覆盖之前的全局变量
 8     alert(a);        //  -->10
 9 }
10 
11 test();
1 //第二种情况
2 var a = 100;
3 function test() {
4     alert(a);        //变量提升,  undefined
5     var a = 10;
6     alert(a);        //10
7 }
8 test();
 1 //第三种情况
 2 var a = 100;
 3 function test() {
 4     alert(a);       //变量提升,   undefined
 5     a = 10;
 6     alert(a);       //10
 7     var a;
 8     alert(a);       //10
 9 }
10 test();

三、看代码,给输出结果

1 for( var i = 1; i <= 3; i++) {
2     setTimeout(function() {
3         console.log(i);
4     },0);
5 };
6 // 4  4  4
1 for(var i = 1; i <= 3; i++) {
2     setTimeout((function(a) {
3         console.log(a);
4     })(i),0);
5 };
6 // 1  2  3

或者

1 for(var i = 0; i < 3; i++) {
2     setTimeout(function() {
3         console.log(i);
4     },0);
5     console.log(i);
6 }
7 // 0  1  2  3  3  3
1 for(var i = 0; i < 3; i++) {
2     setTimeout((function(n) {
3         console.log(n);
4     })(i),0);
5     console.log(i);
6 }
7 // 0  0  1  1  2  2
1 for(var i = 0; i < 3; i++) {
2     setTimeout((function(n) { return function(){
3         console.log(n);
4     };})(i),0);
5     console.log(i);
6 }
7 // 0  1  2  0  1  2
原文地址:https://www.cnblogs.com/songya/p/8625183.html