JS一星期旅途(第一天)
1.闭包
- 定义:
指有权访问另一个函数作用域中的变量的函数。比如:函数中创建函数,跟据作用链得知,外层函数有权访问内部函数的变量,即称该内部的函数为闭包。
- 益处:
从外部读取局部变量 eg:
1 function f1(){ 2 3 n=999; 4 5 function f2(){ 6 alert(n); 7 } 8 9 return f2; 10 11 } 12 13 var result=f1(); 14 15 result(); // 999 访问函数局部变量n
让这些变量的值始终保持在内存中 eg:
1 function f1(){ 2 3 var n=999; 4 5 nAdd=function(){n+=1} 6 7 function f2(){ 8 alert(n); 9 } 10 11 return f2; 12 13 } 14 15 var result=f1(); 16 17 result(); // 999 18 19 nAdd(); 20 21 result(); // 1000
2.js是没用块级作用域的,但可以模仿
function(){})();//在此定义的变量只在该括号内有效,实现块级作用域的效果。 var a=function(){}; a();->(function(){})();//取代a,就演化成该式
3.作用域一层一层的向上搜索
var aNumber = 100; tweak(); function tweak(){ document.write(aNumber); //结果:undefined 因为在函数内搜索至变量 var aNumber var aNumber = 123; }
浙公网安备 33010602011771号