闭包
广义,闭包:所有函数
狭义,闭包:满足2个条件
- 一个函数嵌套一个内部函数,且内部函数访问外部变量。
- 内部函数必须被外部引用。
好处:让局部变量持续保存。
劣势:局部变量一直存在,占内存,导致内存浪费。
let outer=function(){ let a=100; let inner=function(){ a++; // 内部函数访问外部变量 console.log(a); } } return inner; // 返回到外部,没有被'销毁' let func=outer(); func(); // 101 func(); // 102 func(); // 103
1、 function Foo(){ var i=0; return function(){ console.log(i++); } } var f1=Foo(); var f2=Foo(); // 新的Foo,i不变 f1(); // 0 f2(); // 0 f2(); // 1 没有新的上下文,还是之前f2的Foo
2、 function f1(){ var n=999; //nAdd和result nAdd=function(){n+=1}; // nAdd是全局变量,作为引用 function f2(){console.log(n)}; return f2; } var result=f1(); // 以下3个引用的scope是同一个 result(); // 999 //f1(); nAdd(); // 没有打印 result(); // 1000