闭包及高阶应用1(惰性函数和单例设计模式)

首先来看一道开放题:谈谈你对闭包的理解,以及在项目中的应用!

  1. 阐述闭包是什么?(引申:堆栈、EC、AO、VO、SCOPE…)
  2. 闭包的作用及在真实项目中的应用场景,以及所带来的问题!
  3. 由闭包引发的高阶编程技巧
  4. 突出自己在分析研究框架的源码(逼格更高的是自己写类库、插件的时候)是怎么应用这些东西的!
    建议:浏览器加载页面会把代码放到栈内存中执行(也就是ECStack),函数进栈执行会产生一个私有的上下文(也就是EC),此上下文能保护里面的私有变量(也就是AO)不受外界的干扰,并且如果当前上下文中的某些内容,被上下文以外的内容所占用,当前上下文是不会出栈释放的,这样可以保存里面的变量和变量值,所以我认为闭包是一种保存和保护内部私有变量的机制…在真实的项目中,其实我应用闭包的场景还是很多的,例如:
  1. 我会基于闭包把自己编写的模块内容包起来,这样自己编写的代码都是私有的,防止和全局变量或者别人的代码冲突,这一点利用的是闭包的保护机制
  2. 在没有用LET之前,我们循环处理事件绑定,在事件触发需要用到索引值的时候,我们基于闭包,把每一轮循环的索引值保存起来,这样来实现我们的需求,只不过现在都是基于LET来完成,因为LET会产生块级作用域来保存需要的内容(机制和闭包类似)
    但是不建议过多使用闭包,因为形成不被释放的上下文,是占用栈内存空间的,过多使用会导致页面渲染变慢,所以要合理应用闭包
    除了这些传统的业务开发中会应用闭包,我之前在研究别人源码和自己写一写插件的时候,往往会利用一些JS高阶编程技巧来实现代码的管理和功能的开发,他们的底层机制其实就是闭包,例如:
  • 惰性函数
  • 柯理化函数
  • compose函数
惰性函数

DOM0事件绑定:xxx.οnclick=function(){}
DOM2事件绑定:xxx.addEventListener(‘click’,function(){}),只不过不兼容IE6~8,IE低版本浏览器中是基于 xxx.attachEvent(‘onclick’,function(){}) 实现的

//实现可以兼容各种事件
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值