闭包的概念及特点

本文围绕JavaScript函数展开,介绍了函数的定义与调用阶段,指出函数执行完毕执行空间通常会销毁,但返回引用数据类型且外部有变量接收时则不会。还阐述了调用栈机制,重点讲解闭包概念、作用及特点,如可访问内部变量、延长变量生命周期等,同时也提及闭包存在占内存等缺点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

函数的两个阶段

  • 定义阶段
  • 调用阶段
  • 注意点:
    =>只要函数执行完毕了,那么执行空间就销毁了
    =>只要函数内部向外部返回一个引用数据类型,并且在函数外部有变量接收的情况下,那么执行空间不会销毁(闭包就是引用了这一概念)

调用栈

  • 函数调用的时候都会在调用栈里面执行
  • 函数调用一次,都会在调用栈里面开辟一个函数执行空间
  • 函数的执行空间调用完毕后,都会自动销毁
  • 怎么让函数执行空间不销毁呢?
    • 给外界返回一个引用数据类型
    • 外界有变量接收
      在这里插入图片描述

闭包

  • 概念:
    =>闭包就是能够读取其他函数内部变量的函数
  • 作用:
    =>可以在函数外部访问函数内部的数据,延长了变量的声明周期,保护私有变量,不会污染全局。

不被销毁的执行空间
在这里插入图片描述

闭包的特点

  • 作用域空间不销毁
    • 优点:因为不销毁,变量不会销毁,延长变量的生命周期
    • 缺点:因为不销毁,会一直占内存,多了以后就会导致内存溢出
  • 可以利用闭包访问在一个函数外部访问函数内部的变量
    • 优点:可以在函数外部访问内部数据
    • 缺点:必须时刻保持引用,导致函数执行栈不被销毁
  • 保护私有变量
    • 优点:可以把一些变量放在函数里面,不会污染全局
    • 缺点:要利用闭包函数才能访问,不是很方便

闭包概念

  • 有一个A函数,在A函数内部返回一个B函数
  • 在A函数外部有变量接收
  • B函数内部访问着A函数内部的私有变量
  • 以上三个条件缺一不可
 function fn(){
            // 私有变量
            let num = 10
            // 要给外界返回一个函数,并且在这个返回的函数内部要引用私有变量
            return function(){
                console.log(num)
            }
        }
        // 外界使用变量接收返回的函数
        let res = fn()
        res()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值