Part 1 . JavaScript 深度剖析-闭包

闭包

  • 闭包(Closure):可以在另一个作用域中调用一个函数的内部函数并访问到该函数的作用域中的成员
// 通常函数调用在函数 makeFn 执行完后,函数 makeFn 里面定义的成员 msg 就会被释放掉
function makeFn () {
  let msg = 'Hello function'
}
// 高阶函数-函数作为返回值
// 函数 makeFn 的调用返回了一个函数 function,而且这个函数 function 还访问了它外部函数
// makeFn 内定义的成员 msg,这就是闭包
function makeFn () {
  let msg = 'Hello function'
  return function () {
    console.log(msg)
  }
}
// 函数 makeFn 的外部对 makeFn 的内部的成员有引用,那 makeFn 的内部的成员就不能被释放掉
// 因为 fn 的调用 fn() 会要访问到 makeFn 内部的成员 msg
const fn = makeFn()
fn()

理解上抓住两点:

❅ 在另一个作用域中可以去调用函数 makeFn 作用域中的内部函数 function

❅ 在调用内部函数 function 时,function 要可以访问到 makeFn 的内部成员

闭包的核心作用:

❅ 把 makeFn 函数中内部成员的作用范围延长

闭包的本质:

❅ 函数在执行的时候会放到一个执行栈上,当函数执行完毕之后会从执行栈上移除,但是堆上的作用域成员因为被外部引用不能释放,因此内部函数依然可以访问外部函数的成员

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值