闭包的定义及作用

闭包的定义及作用1 闭包的定义 闭包就是能够读取其他函数内部变量的函数 在 js 中 可以将闭包理解成 函数中的函数 nbsp nbsp nbsp 如下代码中 f2 函数就是闭包 functionf1 varm 10 functionf2 alert m 10 2 闭包的作用 nbsp nbsp nbsp A 可以读取函数内部的变量 nbsp nbsp nbsp B 让这些变量的值始终保存

1、闭包的定义:闭包就是能够读取其他函数内部变量的函数。在js中,可以将闭包理解成“函数中的函数“。

     如下代码中f2()函数就是闭包:

 function f1(){     var m = 10;     function f2(){       alert(m); // 10     } }

2
闭包的作用:

     A、可以读取函数内部的变量

     B、让这些变量的值始终保存在内存中。这是因为闭包的执行依赖外部函数中的比那辆,只有闭包执行完,才会释放变量所占的内存

3、使用闭包的注意事项

   (1)  问题:由于闭包会使得函数中的变量都被保存在内存中,内存消耗大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能会造成内存泄露。

              解决方法:在退出函数之前,将不使用的局部变量全部删掉

   (2)  问题:闭包会在父函数外部,改变父函数内部变量的值。

              如果把父函数当做对象使用,把闭包当做公用方法,把内部变量当做私有属性,此时不要随便改变父函数内部变量的值。

             如下面的例子:

 //----代码一  var name = "The Window";   var object = {     name : "My Object",     getNameFunc : function(){       return function(){ //js中,函数就是作用域         return this.name; // 闭包 + this,造成的问题,函数中的this不能访问到作用域外的变量       };     }   };   alert(object.getNameFunc()()); //this的作用域是在函数执行的时候确定,因为匿名函数是一个全局变量,因此this指向的是window对象 // 因此输出结果是:The Window //-----代码二   var name = "The Window";   var object = {     name : "My Object",     getNameFunc : function(){       var that = this; //--this指向object,保留了对象object在that里面,       return function(){         return that.name; //这里输出对象object的name属性的值       };     }   }; alert(object.getNameFunc()()); // 所以暑促值:My Object

    一道闭包的面试题

function fun(n,o){ console.log(o); return { fun:function(m){ return fun(m,n); } }; } var a = fun(0); a.fun(1); a.fun(2); a.fun(3); var b = fun(0).fun(1).fun(2).fun(3); var c = fun(0).fun(1); c.fun(2); c.fun(3); //问:三行a,b,c的输出分别是什么? var a = fun(0); a.fun(1); a.fun(2); a.fun(3); //undefined 0 0 0 var b = fun(0).fun(1).fun(2).fun(3); //undefined 0 1 2 var c = fun(0).fun(1); c.fun(2); c.fun(3); //undefined 0 1 1

看下面这段代码,调用fun后,会返回一个空对象

function fun(n,o){ return { } }
 function fun(n,o){ console.log(o); return { fun:function(m){ return fun(m,n); } }; } var a = fun(0);

注意:当调用函数的时候,传入的实参比函数声明时指定的形参个数少时,剩下的形参都被设定为undefined

上面调用函数var a=fun(0);  输出的结果如下:

console.log(o);   //undefined

a的值是调用fun(0)后返回的对象,即a的值如下:

{ fun:function(m){ return fun(m,0); } }

理解了这里,上面的题目就可以做出来了。

详细解答,参考链接:详细解答


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/232600.html原文链接:https://javaforall.net

(0)
上一篇 2025年9月28日 下午6:01
下一篇 2025年9月28日 下午6:22


相关推荐

  • PHP审计之in_array函数缺陷绕过

    PHP审计之in_array函数缺陷绕过in_array函数函数使用in_array:(PHP4,PHP5,PHP7)功能:检查数组中是否存在某个值定义:boolin_a

    2021年12月13日
    69
  • HashMap和TreeMap区别详解以及底层实现

    HashMap和TreeMap区别详解以及底层实现前言首先介绍一下什么是 Map 在数组中我们是通过数组下标来对其内容索引的 而在 Map 中我们通过对象来对对象进行索引 用来索引的对象叫做 key 其对应的对象叫做 value 这就是我们平时说的键值对 HashMap 通过 hashcode 对其内容进行快速查找 而 TreeMap 中所有的元素都保持着某种固定的顺序 如果你需要得到一个有序的结果你就应该使用 TreeMap HashMap 中元素的排列顺序是不固定的

    2026年3月17日
    1
  • docker 运行tomcat_docker和tomcat区别

    docker 运行tomcat_docker和tomcat区别在学习狂神的docker内容网络学习这一步的时候,按照步骤启动tomcat镜像,但是执行ipaddr之后发现下面问题,经过分析这说明我们下载的Tomcat镜像是精简版的,利用这个镜像去打开一个容器的时候发现没有ipaddr这个命令。所以到导致我们上述报错。上图执行的命令敲错了,重新执行aptinstall-yiproute2…

    2022年7月27日
    13
  • 双参数威布尔分布(Weibull分布)参数计算(根据故障数据,求双参数威布尔分布的参数详细步骤)

    双参数威布尔分布(Weibull分布)参数计算(根据故障数据,求双参数威布尔分布的参数详细步骤)根据故障数据求威布尔分布参数步骤根据众多文献研究 设备故障数据大多服从指数分布 威布尔分布或对数正态分布 其中威布尔分布较为常用 本文主要介绍威布尔分布的简单应用 并根据某设备故障数据为例简单介绍威布尔分布参数的计算方法 参考文献 11 参考文献 221 双参数威布尔分布的概率密度函数 概率分布函数 可靠度函数 2 预处理故障数据将故障数据按时间排序 假设设备分别在以下时间点失效 11 1 23 5 58 4 则将此时间从小到大排序 并计算中位秩 中位秩的计算公式如下 其中 i 表示第几个数据 n

    2026年3月19日
    3
  • 月之暗面宣布发布Kimi K2 Thinking开源思考模型。

    月之暗面宣布发布Kimi K2 Thinking开源思考模型。

    2026年3月12日
    2
  • 【R语言】GARCH模型的应用

    【R语言】GARCH模型的应用一 数据来源 沪深 300 指数 是由沪深证券交易所于 2005 年 4 月 8 日联合发布的反映沪深 300 指数编制目标和运行状况的金融指标 并能够作为投资业绩的评价标准 为指数化投资和指数衍生产品创新提供基础条件 因此 本次数据来源于网易财经 研究的数据集对象是沪深 300 指数 股票代码为 000300 此次分析选取了沪深 300 指数 2000 年 1 月到 2019 年 12 月的工作日收盘价格数据 二 数据分析 一 时序图 为了分析数据的波动情况 对其进行对数化和差分得到对数收益率 下图为沪深 3

    2026年3月18日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号