js的闭包是一个前端工程师学习路上必须理解的一个东西,要理解闭包就必须理解变量作用域和生存周期
作用域,就是指变量的有效范围,比如函数的局部变量的有效范围就是函数内部,全局变量在全局作用域有效
生存周期:全局变量的生存周期是永久性的,除非我们主动销毁,但是普通的函数局部变量就不一样了,函数执行完毕就会销毁,确切的说当一个变量没有被引用的时候就会触发回收机制,具体可以去看看js的自动回收机制,这个对理解闭包很有帮助
var a=1;
function test(){
var b=2;
console.log(b);
}
test();
a变量的作用域是全局,而b变量的作用域只是在函数test里面
当函数执行完毕后b变量会触发自动回收机制,从而回收b变量的内存,而a变量是全局变量,生存周期是永久的
闭包的作用就是为了延续局部变量的生存周期,也可以用来封装不想暴露在全局的变量。
例如:
var test=(function(){
function test2(){
var b=2;
console.log(b);
}
test2();
return test2;
})()
上面的test2函数执行完毕后,变量b不会触发回收机制,因为可以通过test()来访问到b变量,也就是说还有指向b变量的索引
这就是闭包,利用垃圾回收机制的规则来达到延长局部变量的生存周期,从而达到封装一个不想暴露全局的变量的目的