最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • Js闭包| 8月更文挑战

    正文概述 掘金(进军的王小二)   2021-08-03   430

    本文正在参加「8月更文挑战」,详情查看 活动链接

    前言

    我记得红宝书中的第一章有句话:JavaScript是一种专为于网页交互而设计的脚本语言。Js在前端的地位不言而喻,而掌握Js的基础更是重中之重。接下来的文章会一点一点的分知识点去学习Js。Js的知识图谱

    闭包的概念

    也许面试会被问到:闭包是什么?说说你对闭包的理解?本文来简单的说一下闭包。

    • 闭包是指有权访问另一个函数作用域中的变量的函数 ——《JavaScript高级程序设计》

    • 当函数可以记住并访问所在的词法作用域时,就产生了闭包,即使函数是在当前词法作用域之外执行 ——《你不知道的JavaScript》

    探索闭包

    来个DEMO

    来个全局变量count,再来个函数addCount使变量count加1

    Js闭包| 8月更文挑战

    上图我在浏览器环境中很简单的实现了,但是这里有个这样的问题,这个count变量是全局变量,是可以很容易的被随意更改的。 Js闭包| 8月更文挑战 我们可以使用Js的内嵌函数,修改一下addCount,把变量count变成局部变量。 Js闭包| 8月更文挑战 这样的局部变量count就不会被外部所影响了。但是新问题又来了,这里不管调用几次函数addCount都返回1,这并不能实现我们所需要的累加效果。

    这时候可以使用闭包来解决当前困境:

    Js闭包| 8月更文挑战

    小结

    最后一个闭包的实现:变量 addCount 指定了函数自我调用的返回字值。自我调用函数只执行一次。设置变量count为 0,并返回函数表达式。addCount变量可以作为一个函数使用。非常棒的部分是它可以访问函数上一层作用域的count。这个叫作 JavaScript 闭包。 它使得函数拥有私有变量变成可能。count受匿名函数的作用域保护,只能通过 addCount 方法修改。

    经典闭包

    外部访问局部变量: Js闭包| 8月更文挑战

    变量x不会被垃圾回收机制回收: Js闭包| 8月更文挑战

    代码

    // 全局
    var count = 0;
    function addCount(){
    count++
    console.log(count);
    }
    addCount();
    //局部变量
    function addCount(){
      let count = 0
      count++
      console.log(count)
    }
    //闭包
    var addCount = (function(){
      let count = 0;
      return function(){
        console.log(count+1)
        return count+=1 
      }
    })()
    // 闭包 外部访问局部变量
    function fn1(){
      let name='wangxiaoer'
      return ()=>{
        console.log(name)
        return name
      }
    }
    // 闭包 销毁y 保留x
    function fn1(){
      let x=1
      return ()=>{
        let y = 1
        console.log(x++)
        console.log(y++)
      }
    }
    

    如果看到这你还不明白什么是闭包:「函数」和「函数内部能访问到的变量」(也叫环境)的总和,就是一个闭包。

    本文小结

    闭包的三个特性:

    • 函数嵌套函数
    • 函数内部可以引用函数外部的参数和变量
    • 参数和变量不会被垃圾回收机制回收

    闭包是一种保护私有变量的机制,在函数执行时形成私有的作用域,保护里面的私有变量不受外界干扰。直观的说就是形成一个不销毁的栈环境。

    熟能生巧(Practice make perfect!)。 以上是对闭包的一些基本说明,各位大佬,如果看见错误的地方感谢帮忙指出,谢谢了!

    Js闭包| 8月更文挑战


    起源地下载网 » Js闭包| 8月更文挑战

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元