javascript闭包变量提升

Posted songya0196

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

 

以上是关于javascript闭包变量提升的主要内容,如果未能解决你的问题,请参考以下文章

javascript闭包变量提升

JS高级. 05 词法作用域变量名提升作用域链闭包

JavaScript作用域和闭包

JS---闭包

全局变量局部变量闭包详解

前端JavaScript基础面试题01_JS基础知识(中)作用域闭包