闭包函数详解

什么实闭包?

在JiavaScript中,根据词法作用域的规则,内部函数总是可以访问其外部函数中声明的变量,当通过调用一个外部函数返回一个内部函数后,即使外部函数已经执行结束了,但是内部函数引用外部函数的变量依然保存在内存中,我们就把这些变量的集合叫做闭包。比如外部函数是 foo,那么这些变量的集合就称为 foo 函数的闭包。

让我们看如下的代码:

function foo() {
   let myName = "父函数内部的变量"
   function innerBar() {
      console.log(myName);
   }
   return innerBar
}
let bar = foo()
bar()

当执行子元素的函数时,使用父函数中声明的变量就会形成闭包,浏览器调试工具就可以检测闭包:

 如上图所示:

    Local 就是外层函数(foo)的作用域,

    Closure(foo) 是指 foo 函数的闭包,

    Global 就是指的全局作用域。

Local  -->  Closure(foo)  -->  Global   就是一个完整的作用域  

闭包的特点:

一般函数执行完了,会从执行栈中弹出去,并且销毁内部变量,但是因为内部函数使用了这个变量,会形成闭包,并把Closure(foo) 对象存在堆中,也就是说,闭包会占用内存,大量使用闭包对性能不好。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值