什么是闭包?
闭包是指存在自由变量的函数!
在A作用域中使用的变量a,却没有在A作用域中声明(即在其他作用域中声明的),对于A作用域来说,a就是一个自由变量。如下代码
示例1:
var a = 10
function fn(){
var b = 20
console.log(a + b)
}
示例2:
function a(x, y){
console.log(x, y) //在这里,x和y都不是自由变量
function b(){
console.log(x, y) //但在这个内部函数b中,x和y相对于b都是自由变量,而函数a的作用域则是环境。
}
//无论b最终是否会作为返回值被函数a返回,b本身都已经形成了闭包。
}
示例3:
函数可以记住并访问所在的词法作用域
function a () {
let value = 2;
function b () {
return value += 2; // 对value局部变量进行累加
}
return b;
}
const fn = a();
console.log(fn()); // 4
console.log(fn()); // 6
console.log(fn()); // 8
优点:1、避免全局变量污染。2、缓存变量
缺点:容易造成内存泄漏
原文出处:
版权声明:本文来源地址若非本站均为转载,若侵害到您的权利,请及时联系我们,我们会在第一时间进行处理。