重新理解闭包
大约 1 分钟约 355 字
闭包
确实很难理解,之前我是这样理解的:
闭包指的是那些引用了另一个函数作用域中变量的函数,通常是在嵌套函数中实现的。
再后来看到这样一段话:
在函数中被使用,但它既不是函数参数、也不是函数的局部变量,而是一个不属于当前作用域的变量,此时它相对于当前作用域来说,就是一个自由变量
。而引用了自由变量的函数,就叫闭包。
比如说:
function fun() {
let a = 123
return function () {
console.log(a)
}
}
var fuN = fun()
fuN()
没错,这样就形成了一个闭包。a 既不是函数的参数,也不是函数的局部变量,对于该函数来说 a 就是一个自由变量,这个函数就是闭包
闭包
使已经运行结束的函数上下文中的变量对象(每个上下文都有一个关联的变量对象,而这个上下文中定义的所有变量和函数都存在于这个对象上
)继续留在内存中,因为闭包函数保留了这个变量对象的引用,所以这个变量对象不会被回收。
所以我们在调用完fun()
函数之后,调用fuN()
,依然可以打印出 a 的值