一、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