重新理解闭包

Frank
  • 开发笔记
  • JS
  • 闭包
大约 1 分钟约 355 字...

闭包确实很难理解,之前我是这样理解的:

闭包指的是那些引用了另一个函数作用域中变量的函数,通常是在嵌套函数中实现的。

再后来看到这样一段话:

在函数中被使用,但它既不是函数参数、也不是函数的局部变量,而是一个不属于当前作用域的变量,此时它相对于当前作用域来说,就是一个自由变量。而引用了自由变量的函数,就叫闭包

比如说:

function fun() {
  let a = 123
  return function () {
    console.log(a)
  }
}
var fuN = fun()
fuN()

没错,这样就形成了一个闭包。a 既不是函数的参数,也不是函数的局部变量,对于该函数来说 a 就是一个自由变量,这个函数就是闭包

闭包使已经运行结束的函数上下文中的变量对象(每个上下文都有一个关联的变量对象,而这个上下文中定义的所有变量和函数都存在于这个对象上)继续留在内存中,因为闭包函数保留了这个变量对象的引用,所以这个变量对象不会被回收

所以我们在调用完fun()函数之后,调用fuN(),依然可以打印出 a 的值

上次编辑于:
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.14.1