闭包函数详解

本文深入探讨JavaScript中的闭包,解释了什么是实闭包,通过一个具体的代码示例展示了如何创建闭包。当内部函数引用外部函数的变量时,即使外部函数执行完毕,这些变量仍保留在内存中,形成长久的作用域链。闭包有助于理解JavaScript的作用域和内存管理,但过度使用可能导致内存消耗增加。了解闭包对于优化JavaScript代码至关重要。
摘要由CSDN通过智能技术生成

什么实闭包?

在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、付费专栏及课程。

余额充值