最新公告
  • 欢迎您光临网站无忧模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 转行前端(JS篇7):闭包之保护

    正文概述 掘金(婉菀)   2020-12-15   415

    JS中的内存分为堆内存和栈内存

    堆内存:存储引用数据类型值(对象:键值对 函数:代码字符串)

    栈内存:提供js代码执行的环境和存储基本类型值

    [堆内存释放]

    让所有引用堆内存空间地址的变量赋值为null即可(没有变量占用这个内存了,浏览器会在空闲的时候把它释放掉)

    [栈内存释放]

    一般情况下,当函数执行完成,所形成的私有作用域(栈内存)都会自动释放掉(在栈内存中存储的值也会释放掉),但是也有特殊不销毁的情况:

    1、函数执行完成,当前形成的栈内存中,某些内容被栈内存以外的变量占用了,此时栈内存不能释放(一旦释放外面找不到原有的内容了)

    2、全局栈内存只有在页面关闭的时候才会被释放掉 ... 如果当前栈内存没有被释放,那么之前在栈内存中存储的基本值也不会被释放

    var i = 1; function fn(i){ return function(n){ console.log(n+(++i)); } } var f=fn(2); f(3) fn(5)(6) fn(7)(8) f(4)

    //=>先把fn执行(传递实参2),把fn执行的返回结果(return后面的值赋值给f

    闭包

    =>函数执行形成一个私有的作用域,保护里面的私有变量不受外界的干扰,这种保护机制称之为闭包 =>市面上的开发者认为的闭包是:形成一个不销毁的私有作用域(私有栈内存)才是闭包

    闭包:柯里化函数 function fn(){ return function(){ } } var f =fn ()

    闭包:惰性函数 var utils=(function (){ return{ } })();


    =>都是形成一个不销毁的栈内存

    ==>闭包项目实战应用

    真实项目中为了保证JS的性能(堆栈内存的性能优化),应该尽可能的减少闭包的使用

    1、闭包具有保护作用:保护私有变量不受外界的干扰

    ==>在真实项目中,尤其是团队协助开发的时候,应当尽可能的减少全局变量的使用,以防止相互之间的冲突(“全局变量污染”),此时我们完全可以把自己这一部分内容封装到一个闭包中,让全局变量转换为私有变量

    (function(){ var n=12; function fn(){ } })()

    ==>不仅如此,我们封装类库插件的时候,也会把自己的情绪都存放到闭包中保护起来,防止和用户的程序冲突,但是我们又需要暴露一些方法给客户使用,这样我们如何处理呢?

    ①JQ这种方式:把需要暴露的方法抛到全局

    (function(){ function jQuery(){ } window.jQuery=window.=jQuery//把需要供外面的方法给win设置属性方式暴露出去 })() jQuery();()

    ②zepto这种方式:基于return把需要供外面使用的方法暴露出去

    var Zepto=(function(){ return{ xxx:function(){ } } })() Zepto.xxx();

    2、闭包具有保存作用:形成不销毁的栈内存,把一些值保存下来,方便后面的调取使用


    下载网 » 转行前端(JS篇7):闭包之保护

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元