JS 闭包

发布时间:2022-07-05 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了JS 闭包脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
要理解闭包,我们得知道什么是变量作用域和作用域链。
变量作用域分为全局作用域和局部作用域,全局作用域在整个js的执行环境中都有效,局部作用域只在该函数体内有效。
作用域链 类似原型链一样,如果在本函数内没有找到该变量,就会逐级向外层函数查找,直到查到全局作用域,这个过程就形成一条作用域链
作用域有一个特点,就是 函数内部可以访问函数外部的变量,反之则不行,在函数外部,是不能获取函数内部的变量。
看下面的一个示例

JS 闭包

了解了上述知识点之后,我们怎么才能获取函数内部的变量呢,就这样,闭包诞生了。
闭包就是为了解决函数内部的变量不能被外部访问而设计的
怎样形成一个闭包呢,通俗点就是 函数里面套函数,先看一段代码
<!DOCTYPE htML>
<html lang="en">

<head>
  <;meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=Edge">
  <meta name="viewport" content="width=device-width, inITial-scale=1.0">
  <title>Document</title>
  <style>
  </style>
</head>
<body>
</body>
<script>
  function fn() {
    VAR num = 1;
    return function () {
      num++
      console.LOG(num)
    }
  }
  var addNum = fn()
  addNum() // num 会是多少呢
  addNum() // num 会是多少呢
  addNum() // num 会是多少呢
  addNum() // num 会是多少呢
</script>
</html>

答案是 2 3 4 5 先看看addNum 是什么吧,

JS 闭包

显而易见,return 的是个函数,但是这个函数引用了 函数 fn 内部的变量num,所以addNum 的函数内的num 会一直保存下来,即不停的addNum()的时候,其中的num会一直叠加,如果想清除这个num,可以在 addNum 函数的内部,把num设为null,内存就会释放。

闭包常见在一些高级应用中,但是面试的时候可能会夹杂在 for循环绑定事件中 函数抖 函数节流等问题中考察
闭包的优点:变量可以长期存储在内存中,避免全局变量的污染,允许私有成员的存在
闭包的缺点点:长期占用内存,使用不当会造成内存的泄露

脚本宝典总结

以上是脚本宝典为你收集整理的JS 闭包全部内容,希望文章能够帮你解决JS 闭包所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。