之前在学习中,总会遇到一些问题,变量在函数外,或者在函数外的一些情况
作用域链和活动对象
1.闭包:有权访问另一个函数作用域中变量的函数
创建闭包常见的方式:在一个函数内部在创建一个函数,比如内部函数
在函数外调用了内部函数,并且还调用了内部函数的变量
结果:1 1 1 1
每次都new一个内部变量,都加1
1 function outerFn() { 2 document.write("外部函数"+"<br/>"); 3 function inner() { 4 var innerVar = 0; 5 innerVar++; 6 document.write("内部函数"+"<br/>"); 7 document.write("内部变量"+"intteVar=" +innerVar+"<br/>"); 8 } 9 //通过返回内部函数 10 return inner; 11 } 12 //在函数外调用函数 13 var fnRef = outerFn(); 14 fnRef(); 15 fnRef(); 16 var fnRef2 = outerFn(); 17 fnRef2(); 18 fnRef2();
全局变量
内部函数引用全局变量
结果:1 2 3 4
1 var i = 0; 2 function outer() { 3 document.write("外部函数"+"<br/>"); 4 function inner() { 5 i++; 6 document.write("内部函数"+"<br/>"); 7 document.write("全局变量"+"i=" +i+"<br/>"); 8 } 9 return inner; 10 } 11 var out = outer(); 12 out(); 13 out(); 14 var out2 = outer(); 15 out2(); 16 out2();
结果:1 2 1 2
1 function outer() { 2 var i = 0; 3 document.write("外部函数"+"<br/>"); 4 function inner() { 5 i++; 6 document.write("内部函数"+"<br/>"); 7 document.write("全局变量"+"i=" +i+"<br/>"); 8 } 9 return inner; 10 } 11 var out = outer(); 12 out(); 13 out(); 14 var out2 = outer(); 15 out2(); 16 out2();