程序员在初期都会遇到关于闭包的问题,
我们先来看下什么是闭包
闭包:内部函数总是可以访问其所在的外部函数中声明的参数和变量,即使在其外部函数被返回(寿命终结)了之后。
特点
-
让外部访问函数内部变量成为可能;
-
局部变量会常驻在内存中;
-
可以避免使用全局变量,防止全局变量污染;
-
会造成内存泄漏(有一块内存空间被长期占用,而不被释放)
知道闭包的定义后那我们怎样来使用闭包的场景
闭包找到的是同一地址中父级函数中对应变量最终的值
function a(){
var num = 0;
function b(){
num+;
console.log(num);
}
return b;
}
var global =100;
var temp = a();
temp();
当a函数运行后,里面构成的作用域我们已经知道了,要明白AO的生命周期是在a函数运行完毕后自动销毁的,函数里面的return b;就宣布a函数运行完毕,而此时返回的是b函数的一个引用,这就等于又声明了一个b函数,注意b函数里面又用到了a函数里面的num字段,而a函数已经销毁了,这里就产生了闭包,我们做如下图解:
b函数声明的数据正是a函数运行后的GO+AO,a函数运行结束后的销毁操作就是不再指向AO,回到最初声明的模样。
b函数运行:
以上就是就是简单闭包的理解,学会了吗?