什么是闭包(Closure)呢 ?

什么是闭包 ?

直接上代码
<script>
 !function shy(){        // 一个函数
	let a = 10           //一个变量
    function b (){       // 一个函数
    console.log(a);  	 //一个函数的内部访问另一个函数的变量
    }
  }()
    </script>

上面这样的就是一个闭包了 超简单的

我的定义: 函数 和 函数内部能访问到的变量(也叫环境)的总和,就是一个闭包。

之前的理解就是 : 闭包是需要函数套函数,然后 return 一个函数

栗子

function shy(){
  var a = 1
  function b(){
    a++
    return a
  }
  return b
}

var func = b()
func()
之前就是觉得这样的就是一个闭包 : 他是 a 变量和 b 函数就组成了一个闭包(Closure)

但是为什么要函数套函数呢?

是因为需要局部变量,所以才把 a 放在一个函数里,如果不把 a 放在一个函数里,a 就是一个全局变量了,达不到使用闭包的目的了 – 隐藏变量

为什么要returen 函数b呢?

因为如果不 return,就无法使用这个闭包。把 return b改成 window.b = b 也是一样的,只要让外面可以访问到这个 b 函数就行了
所以 return b 只是为了 b 可以被使用,也跟闭包无关.

闭包的作用?

闭包常常用来 间接访问一个变量。也就是 :隐藏一个变量。
如果我们在打怪兽 显示剩多少管血的话
不用闭包 使用全局变量的话

window.xie = 10

这样的话 如果改这些代码 这游戏也就没意思了 卡bug 会封号
那就要局部变量 但是 局部变量的话又不会被人访问得到了

所以 那就搞一个函数 让别人可以可以 ‘间接访问’

代码
  !function() {       				// 一个立即执行函数
            let lives = 50          	// 一个变量 
            window.add=function(){   	// 这就是一个闭包了 
                lives += 1             	// 另一个函数内部访问
            }
            window.jian=function(){  	// 这也是一个闭包了
                lives -= 1           	// 也访问了 
            }
        }()

如果其他文件要引入的话 就可以window.add() 来 加血了

找闭包

在这里插入图片描述

正是由于 JS 的函数内部可以使用函数外部的变量,所以这段代码正好符合了闭包的定义。而不是 JS 故意要使用闭包

我觉得 这玩意 根本不需要知道闭包这个概念,一样可以使用闭包 之前没听过闭包的时候也这么写的啊 ! 知道这闭包的话 还有点迷糊了… 忘记闭包才是真正的记住了

闭包会造成内存泄漏 ----- 并不会的. 我这网上着了好久 都是差不多的 但是这个说的我能看懂

在这里插入图片描述
end…

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值