1.什么是闭包
在js中,函数外部访问不了函数内部变量,函数内部可以访问外部函数变量。
可以访问另一函数作用域变量的函数都是闭包。
2.示例一:
function a(){ var n=0; function inc(){ n++; console.log(n); } inc(); inc(); }
运行结果:
1 2
inc可以访问外部变量n
3.示例二:
function a(){ var n=0; this.inc=function(){ n++; console.log(n); }; } var c = new a(); c.inc(); c.inc();
运行结果:
1 2
4.示例三:
function a(){ var n=0; function inc(){ n++; console.log(n); } return inc; } var c=a(); c(); c();
运行结果:
1 2
5.常见陷阱
function func(){ var result = new Array(); for(var i=0;i<10;i++){ result[i]=function(){ return i; }; } return result; } var funcs=func(); console.log(funcs[0]());
运行结果:
10
func()返回的是函数名数组,此时i=10;
执行数组中函数 return i;所以返回10,而不是0
6.闭包的缺点
内部函数引用外边变量,会占用内存。不必要的闭包会造成内存消耗。