手机版
网站地图
美文美图
最新动态
你好,欢迎访问
好美文阅读网
个性皮肤
搜索
网站首页
美文
文章
散文
日记
诗歌
小说
故事
句子
作文
签名
祝福语
情书
范文
读后感
文学百科
美文摘抄
节日文章
名家散文
网名大全
座右铭
口号大全
面试技巧
说说大全
阅读答案
诗词默写
流言蜚语
节日祝福
好句子
经典台词
谚语大全
亲情故事
友情故事
表白情书
工作报告
活动总结
心得体会
专题汇总
美文网首页
(转)js闭包初入门
(转)js闭包初入门
作者:
秃头成就技术
| 来源:发表于
2018-09-15 08:44 被阅读9次
先看一段JS代码:function a(){
var num = 0;
function b(){ num++; console.log(num); }
return b;
}
var add = a();
add(); // 1
add(); // 2
add(); // 3
这段代码的特点:·函数a里面定义了一个函数b,函数b里面的操作让变量num自加的,最后一句是return b,将函数b返回了;
·add变量是指向了函数a的(有点像C的指针),函数a里面的函数b是被外部变量add引用了,函数b就形成了一个闭包了。
那闭包一般用来干嘛呢?
·在JavaScript模拟实现块级作用域,封装私有变量,防止污染全局变量举个栗子🌰
var foo = (function(){
var secret = "secret";
return {
//特权方法
get_secret : function () {
return secret;
},
set_secret :function(new_secret){
secret = new_secret;
}
}
})();
alert(secret) //undefined
alert(foo.get_secret()); //secret
alert(foo.get_secret()); //x
JS是没有类似Java的class、private关键字来封装一个私有变量的,在JS是使用闭包机制去模拟实现的,首先在匿名函数里声明一个secret变量值也为'secret',在函数的外部呢是无法访问到的。在匿名函数里return的是setter和getter方法,foo对象指向的是匿名函数,这样就能在外部去访问一个局部变量了,但是要通过setter和getter的方法,它们也叫做特权方法
再或者呢,不设置setter的方法,只有个getter的方法,老大跟我说这样就用在游戏里能防作弊了0.0
闭包的弊端: javascript是高级语言,拥有自动的垃圾回收机制,所需内存的分配以及无用内存的回收完全实现了自动管理。简单来说就是找出那些不再继续使用的变量,然后释放其占用的内存。
垃圾收集方式主要有:1、标记清除;2、引用计数;
常见的方式就是标记清除了,垃圾收集器会给所有贮存在内存的变量加上标记,然后它会去掉环境中的变量以及被环境中被其他变量引用的变量的标记,剩下还有标记的变量就被视为准备删除垃圾了,因为它们不会再被环境所使用到,最后,垃圾收集器完成内存清除工作。
到 2008 年为止,IE、Firefox、Opera、Chrome 和 Safari 的 JavaScript 实现使用的都是标记清除式的 垃圾收集策略(或类似的策略),只不过垃圾收集的时间间隔互有不同。
正如上面说到的,闭包是在一个函数里面函数,但是被外部的变量所引用到了,所以它是会永远贮存在内存里而不会被销毁,造成了内存泄露,所以对于闭包还是要谨慎使用
相关文章
网友评论
本文标题:
(转)js闭包初入门
本文链接:
https://www.haomeiwen.com/subject/kklpgftx.html
延伸阅读
那年盛夏诗歌
环境监察队工作总结范文
优秀教师学习心得范文
华胥引的读后感300字
《Its red》教学反思范文
农资购销的合同范本
竞选中队委优秀演讲稿
辞金蹈海的成语解释
《世纪宝鼎》公开课教案设计
因为爱你,所以牵挂
今生今世红尘醉——美到
一个90后的内心独白
致已逝去的高中年华
深度阅读
您也可以注册成为美文阅读网的作者,发表您的原创作品、分享您的心情!
情人节
母亲节
重阳节
清明节
端午节
植树节
元宵节
妇女节
愚人节
圣诞节
父亲节
教师节
儿童节
劳动节
青年节
建军节
万圣节
平安夜
光棍节
中秋节
国庆节
感恩节
腊八节
更多话题
栏目导航
摄影
故事
互联网
读书
旅行
热点阅读
《总是在路上》 文/字之味
有些
投资离你很远吗?
2018-09-11
消费者决策时的想法?
《为什么你学了那么多道理,却并没有深度学会,依然还是感到困惑》
无题(五)
2018-09-11
读书打卡
五条高铁线交汇的广东惠州,如何在粤港澳大湾区顺势崛起?
网友评论