JavaScript 闭包

本文详细解析了JavaScript中闭包的概念及其工作原理,通过具体示例展示了如何利用闭包访问和修改外部函数的变量,同时探讨了闭包在实际开发中的应用。

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

说到闭包官方的解释太过于令人费解。

本人感觉闭包本质就是能够读取其他函数内部变量的函数。

一般情况下我们是不能通过一个函数读取另一个函数内部定义的变量的值。

 function f1(){

    var n=999;

    function f2(){
     var m = 1 ;alert(n); // 999
    }

  }

但是: 如上写法: 函数f2 就可以访问函数f1内部定义的变量值。

反过来,函数f1却不能访问f2内部定义的变量m,这就是JavaScript的链式作用域。

子对象会一级一级向上寻找对应变量,若找到则返回,否则报空,反之则不行。

此时,只需要把函数f2作为对象整体返回就可以在f1外部获取其内部定义的变量值。

需要注意的时,使用闭包后,由于作用域链的原因,数据可范围,并保持在内存中,不会被销毁。

 function f1(){

    var n=999;

    nAdd=function(){n+=1}

    function f2(){
      alert(n);
    }

    return f2;

  }

  (1)var result=f1();

  (2)result(); //alert  999

  (3)nAdd();  // 执行方法+1

  (4)result();  // alert 1000

1. 首先将函数f1 赋值给对象

2.执行对象方法  此时n = 999  此时nAdd函数在f1内部只是完成定义,但并没有执行,它也是一个闭包

3. 执行n+1    1000

4. 再次执行alert   1000

result 实际上就是闭包f2函数


可知:闭包会在上级函数外部,通过调用子函数,改变上级函数内部定义的局部变量。相当于getter/setter方法

网上有个比较经典的题,借此说明一下,帮助理解

 var name = "The Window";

  var object = {
    name : "My Object",

    getNameFunc : function(){
      return function(){
        return this.name;
      };

    }

  };

  alert(object.getNameFunc()());

这里的getNameDunc 属性值有:匿名函数返回值决定(此时返回值对象是定义的函数,而非函数的结果)

因此this-->window    导致 object.getNameFunc()() 相当于 window.name 即 The Window

  var name = "The Window";

  var object = {
    name : "My Object",

    getNameFunc : function(){
      var that = this;
      return function(){
        return that.name;
      };

    }

  };

  alert(object.getNameFunc()());

此段代码:this--> object 由于 var that = this 导致 that中保存有object对象的上下文

所以getNameFunc属性:匿名函数返回值对象(也是函数,非函数结果),由于闭包函数保存有object上下文

因此object.getNameFunc()() 相当于调用 object.name 即  My Object 

this 指向由自身所在函数调用的上下文环境决定。

内容概要:该研究通过在黑龙江省某示范村进行24小时实地测试,比较了燃煤炉具与自动/手动进料生物质炉具的污染物排放特征。结果显示,生物质炉具相比燃煤炉具显著降低了PM2.5、CO和SO2的排放(自动进料分别降低41.2%、54.3%、40.0%;手动进料降低35.3%、22.1%、20.0%),但NOx排放未降低甚至有所增加。研究还发现,经济性和便利性是影响生物质炉具推广的重要因素。该研究不仅提供了实际排放数据支持,还通过Python代码详细复现了排放特征比较、减排效果计算和结果可视化,进一步探讨了燃料性质、动态排放特征、碳平衡计算以及政策建议。 适合人群:从事环境科学研究的学者、政府环保部门工作人员、能源政策制定者、关注农村能源转型的社会人士。 使用场景及目标:①评估生物质炉具在农村地区的推广潜力;②为政策制定者提供科学依据,优化补贴政策;③帮助研究人员深入了解生物质炉具的排放特征和技术改进方向;④为企业研发更高效的生物质炉具提供参考。 其他说明:该研究通过大量数据分析和模拟,揭示了生物质炉具在实际应用中的优点和挑战,特别是NOx排放增加的问题。研究还提出了多项具体的技术改进方向和政策建议,如优化进料方式、提高热效率、建设本地颗粒厂等,为生物质炉具的广泛推广提供了可行路径。此外,研究还开发了一个智能政策建议生成系统,可以根据不同地区的特征定制化生成政策建议,为农村能源转型提供了有力支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值