闭包
闭包函数 让子函数返回父函数的局部变量
一个作用域有权访问另外一个作用域的局部变量
作用:延伸变量的使用范围,能够访问函数作用域中的变量(局部变量);
创建外部可访问的隔离作用域,避免全局变量污染
缺点:被引用的私有变量不能被销毁,增大了内存消耗,造成内存泄漏;
解决方法:可以在使用完变量后手动为它赋值为null
function Father(){
let num=123;
//将子函数(匿名函数)作为父函数的返回值
return function(){
let n=0;
//console.log(num);//123
return num;//让匿名函数)返回父函数的局部变量
}
}
let re=Father();//re即为闭包函数
console.log(re);//re保存的是父函数的返回值(匿名函数)
//调用匿名函数,访问函数作用域中的变量(局部变量) 局部变量num无法被销毁
console.log(re());//123
//匿名函数作为父函数的返回值被赋值给了re,re保存的是父函数的返回值(匿名函数)
//匿名函数内部引用着父函数的变量num,所以变量num无法被销毁,产生了内存消耗
//变量n是每次被调用时新创建的,所以每次匿名函数执行完后它就把属于自己的变量连同自己一起销毁(垃圾回收机制)