永发信息网

JavaScript中的闭包是用来做什么的?

答案:2  悬赏:70  手机版
解决时间 2021-03-28 20:36
JavaScript中的闭包是用来做什么的?
最佳答案
js中的局部变量出了作用于就会被垃圾回收机制回收,这时候如果想长久保存这个变量不被回收就要用到闭包。
真心想学习JS、以后想朝着这个方向发展,那么你一定要来这个企鹅裙,前面前面是二
九六,中间是五九1,最后面就是二九0,连起来就是完整的噢,来这里可以这里学习经验,得到专人解答,这样你可以成长的更快,期待你的加入!!!闭包的规则是:1,函数嵌套函数。2,内部函数使用了外部函数的变量或者参数。
下面有个二级菜单的小案例就是使用了闭包的特性:
012

这就是闭包的一个应用。
全部回答

闭包有两个作用,一是外部可以读取函数内部的变量  function f1(){
    n=999;
    function f2(){
      alert(n);
    }
    return f2;
  }
  var result=f1();
  result(); // 999
另一个就是让这些变量的值始终保持在内存中function f1(){
    var n=999;
    nAdd=function(){n+=1}
    function f2(){
      alert(n);
    }
    return f2;
  }
  var result=f1();
  result(); // 999
  nAdd();
  result(); // 1000
在这段代码中,result实际上就是闭包f2函数。它一共运行了两次,第一次的值是999,第二次的值是1000。这证明了,函数f1中的局部变量n一直保存在内存中,并没有在f1调用后被自动清除。
为什么会这样呢?原因就在于f1是f2的父函数,而f2被赋给了一个全局变量,这导致f2始终在内存中,而f2的存在依赖于f1,因此f1也始终在内存中,不会在调用结束后,被垃圾回收机制(garbage collection)回收。
这段代码中另一个值得注意的地方,就是“nAdd=function(){n+=1}”这一行,首先在nAdd前面没有使用var关键字,因此 nAdd是一个全局变量,而不是局部变量。其次,nAdd的值是一个匿名函数(anonymous function),而这个
匿名函数本身也是一个闭包,所以nAdd相当于是一个setter,可以在函数外部对函数内部的局部变量进行操作。
其应用场景就是:
函数a中i只有函数b才能访问,而无法通过其他途径访问到,因此保护了i的安全性。
在内存中维持一个变量
通过保护变量的安全实现JS私有属性和私有方法(不能被外部访问)
私有属性和方法在Constructor外是无法被访问的
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
毛牛鞭可以和玛卡和人参和枸杞子可以一起泡酒
谁知道现在的费用比例占销售收入的多少合适?
2013届毕业生是指今年上大几的学生?
安全护照不可摔跤大班教案
最大功率4000w的电源转换器连接线为什么只用3
自酿谷酒度数高很难喝怎么办?
谁会写出有趣的标点符号就是把古诗或句
沈阳市皇姑区,除了珠江五校,岐山一校和实验
路考怎么靠边停车怎么踩刹车
烂户型的特点竟然有这么多!你都发现了吗?
人工挖孔桩垂直吊运弃土
可以让别人给我体检心电图不?就差这一项了
王述字怀祖。少孤,事母以孝闻。安贫守约,不求
上海夏一实业有限公司怎么样?
泰国可以用银联卡吗
推荐资讯
给新婚的人送什么礼物好?
60的缸养两条地图两条鹦鹉都是10公分左右需要
什么是“凑10法”和“破10法”?
悦来河我想知道这个在什么地方
求张含韵唱的《想唱就唱》歌曲资源
杨家将七子和夫人简历
急求灯油unhappy refrain !!MP3
游泳能减肚腩吗?
当家人吵架把离家出走当做习惯性的事情并以此
我想问八女投江的八个女人分别叫什么名字
找类似《平凡的世界》的小说
①~⑤的正确顺序是①血浆中的一部分水、无机
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?