全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

JS闭包用法实例分析

本文实例讲述了JS闭包用法。分享给大家供大家参考,具体如下:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title></title>
  </head>
  <body>
    <script type="text/javascript">
//      第一,函数作为返回值
      function fn(){
        var max = 10;
        return function bar(x){
          if(x > max) {
            console.log(x);
          }
        };
      }
      var f1 = fn();
      f1(15);
    </script>
    <script type="text/javascript">
//      第二,函数作为参数被传递
      var max = 10;
      fn = function(x){
        if(x > max){
          console.log(x);//15
        }
      };
      (function(f){
        var max = 100;
        f(15);
      })(fn);
    </script>
    <script>
      function fn(){
        var max = 10;
        return function bar(x){
          if(if > max){
            console.log(x);
          }
        };
      }
      var f1 = fn();
        max = 100;
      f1(15);
    </script>
  </body>
</html>

第一步,代码执行前生*局上下文环境,并在执行时对其中的变量进行赋值。此时全局上下文环境是活动状态。

全局上下文环境:max是undefined

第二步,执行var f1 = fn();代码时,调用fn(),产生fn()执行上下文环境,压栈,并设置为活动状态。

fn()上下文环境:max是10

第三步,执行完var f1 = fn();,fn()调用完成。按理说应该销毁掉fn()的执行上下文环境,但是这里不能这么做。

注意,重点来了:因为执行fn()时,返回的是一个函数。函数的特别之处在于可以创建一个独立的作用域。

而正巧合的是,返回的这个函数体中,还有一个自由变量max要引用fn作用域下的fn()上下文环境中的max。

因此,这个max不能被销毁,销毁了之后bar函数中的max就找不到值了。因此,这里的fn()上下文环境不能被销毁,还依然存在与执行上下文栈中。

执行到max = 100;时,全局上下文环境将变为活动状态,但是fn()上下文环境依然会在执行上下文栈中。

另外,执行完max = 100;,全局上下文环境中的max被赋值为100。

全局上下文环境:max是100 fn()上下文环境:max是10

第四步,执行到f1(15);,执行f1(15),即执行bar(15),创建bar(15)上下文环境,并将其设置为活动状态。

执行bar(15)时,max是自由变量,需要向创建bar函数的作用域中查找,找到了max的值为10。

这里的重点就在于,创建bar函数是在执行fn()时创建的。fn()早就执行结束了,但是fn()执行上下文环境还存在与栈中,因此bar(15)时,max可以查找到。如果fn()上下文环境销毁了,那么max就找不到了。

使用闭包会增加内容开销,现在很明显了吧!

第五步,执行完f1(15);就是上下文环境的销毁过程,这里就不再赘述了。

闭包和作用域、上下文环境有着密不可分的关系,真的是“想说爱你不容易”!

另外,闭包在jQuery中的应用非常多,无论你是想了解一个经典的框架/类库,还是想自己开发一个插件或者类库,像闭包、原型这些基本的理论,是一定要知道的。否则,到时候出了BUG你都不知道为什么,因为这些BUG可能完全在你的知识范围之外。

更多关于JavaScript相关内容可查看本站专题:《javascript面向对象入门教程》、《JavaScript中json操作技巧总结》、《JavaScript切换特效与技巧总结》、《JavaScript查找算法技巧总结》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》

希望本文所述对大家JavaScript程序设计有所帮助。


# JS  # 闭包  # 通俗易懂地解释JS中的闭包  # JS继承与闭包及JS实现继承的三种方式  # 浅谈JavaScript作用域和闭包  # JS闭包的几种常见形式实例详解  # JS实现闭包中的沙箱模式示例  # JavaScript闭包的简单应用  # 通过示例彻底搞懂js闭包  # JavaScript闭包和回调详解  # 浅谈JS封闭函数、闭包、内置对象  # JavaScript闭包_动力节点Java学院整理  # 深入理解Javascript中的作用域链和闭包  # JS闭包可被利用的常见场景小结  # 利用js的闭包原理做对象封装及调用方法  # javascript闭包功能与用法实例分析  # JavaScript中闭包的详解  # 图解Javascript——作用域、作用域链、闭包  # 轻松理解JavaScript闭包  # js中的闭包学习心得  # 的是  # 在与  # 设置为  # 值为  # 就找  # 类库  # 是在  # 来了  # 你是  # 相关内容  # 出了  # 之处  # 遍历  # 会在  # 并在  # 你不  # 数据结构  # 给大家  # 想了  # 密不可分 


相关文章: Swift中switch语句区间和元组模式匹配  小程序网站制作需要准备什么资料,如何制作小程序?  郑州企业网站制作公司,郑州招聘网站有哪些?  *服务器网站为何频现安全漏洞?  如何快速搭建FTP站点实现文件共享?  制作农业网站的软件,比较好的农业网站推荐一下?  济南网站建设制作公司,室内设计网站一般都有哪些功能?  香港服务器网站推广:SEO优化与外贸独立站搭建策略  视频网站制作教程,怎么样制作优酷网的小视频?  北京建设网站制作公司,北京古代建筑博物馆预约官网?  如何使用Golang table-driven基准测试_多组数据测量函数效率  怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?  免费制作小说封面的网站有哪些,怎么接网站批量的封面单?  定制建站如何定义?其核心优势是什么?  香港服务器如何优化才能显著提升网站加载速度?  存储型VPS适合搭建中小型网站吗?  公司网站建设制作费用,想建设一个属于自己的企业网站,该如何去做?  c# Task.Yield 的作用是什么 它和Task.Delay(1)有区别吗  建站之星如何配置系统实现高效建站?  香港服务器网站生成指南:免费资源整合与高速稳定配置方案  建站之星五站合一营销型网站搭建攻略,流量入口全覆盖优化指南  如何用花生壳三步快速搭建专属网站?  如何用PHP快速搭建高效网站?分步指南  如何在香港免费服务器上快速搭建网站?  建站之星后台搭建步骤解析:模板选择与产品管理实操指南  css网站制作参考文献有哪些,易聊怎么注册?  建站之星伪静态规则如何设置?  Python lxml的etree和ElementTree有什么区别  正规网站制作公司有哪些,目前国内哪家网页网站制作设计公司比较专业靠谱?口碑好?  如何在Windows虚拟主机上快速搭建网站?  赚钱网站制作软件,建一个网站怎样才能赚钱?是如何盈利的?  Python如何创建带属性的XML节点  如何在云指建站中生成FTP站点?  微信小程序 input输入框控件详解及实例(多种示例)  标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?  如何在IIS服务器上快速部署高效网站?  如何在沈阳梯子盘古建站优化SEO排名与功能模块?  小型网站建站如何选择虚拟主机?  大学网站设计制作软件有哪些,如何将网站制作成自己app?  如何快速搭建高效香港服务器网站?  制作网站的基本流程,设计网站的软件是什么?  湖北网站制作公司有哪些,湖北清能集团官网?  ,柠檬视频怎样兑换vip?  做企业网站制作流程,企业网站制作基本流程有哪些?  网站视频怎么制作,哪个网站可以免费收看好莱坞经典大片?  Java解压缩zip - 解压缩多个文件或文件夹实例  免费公司网站制作软件,如何申请免费主页空间做自己的网站?  韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南  制作网站的软件免费下载,免费制作app哪个平台好?  网站制作大概多少钱一个,做一个平台网站大概多少钱? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。