闭包:是指有权访问另一个函数作用域中的变量的函数。
在JavaScript中没有块级作用域,是链式作用域结构,子对象会向上一级一级寻找父级的变量。因此在JavaScript中我们需要明白变量的作用域:全局变量和局部变量两种;
JavaScript特殊的一点就是,函数内部可以读取全局变量,而函数外部无法读取函数内部的局部变量。比如:
var a=1;
function a(){
console.log(n);//1
}
var result=a();
result();//1
function(){
var b=2;
console.log(b);//2
}
console.log(b)//error
理解了JavaScript的变量作用域后就很好理解闭包了,闭包就是为了让函数外部可以访问到函数内部的变量,一般闭包的实现方法就是在函数中创建另一个函数;例如:
function a(){
var n=1;
return function(){
console.log(n);
}
}
var result=a();
result();
使用闭包的好处就是使外部可以访问函数内部的变量,而且闭包会是局部变量始终都在内存中。这样就会带来一些问题,比如内存泄漏。因此在实际开发中应尽量少使用闭包。