为了账号安全,请及时绑定邮箱和手机立即绑定

有没有人遇到过这个问题哈!基于面向对象的编程,是否还要深究闭包?感激不尽

有没有人遇到过这个问题哈!基于面向对象的编程,是否还要深究闭包?感激不尽

青春有我 2019-07-27 09:31:47
最近看了很多重新大谈关于闭包的资料,越看越不懂。我们现在有了箭头函数,有了块级作用于,有了很多以前没有的方便开发的方法。而我所接触到的闭包应用,完全可以靠定义一个对象并操作其属性完成。个人理解,闭包的价值在于其可以在不污染全局变量的前提下维持函数的作用域链,但是我看了很多例子,发现这些实现多数都可以靠定义一个对象完成。且对比下来,这些例子的代码易读性也特别可怕,this套_this套self套_self实在可怕。很多人也拿立即执行函数来讲闭包,然而立即执行函数其自身就有代码质量风险(分号问题)。前几年还流行过谈函数式编程,结果却没流行起来,我倒觉得函数式编程更容易使用和维护。为什么闭包却杀回马枪了?可能我没有描述清楚啥是回马枪。我最近接触的几个项目,原本都是定义对象之后操作对象来实现功能的,闭包这个概念并不放在台面上。最近认识的几个人一直在大谈闭包,并且原本可以使用操作对象属性的一些功能设计全部改成了网上很容易搜到的闭包使用。代码易读性大打折扣。项目中也是不推荐不同代码风格混用的。如果在对象操作VS闭包两者之间进行排他性选择,到底该选哪个。
查看完整描述

2 回答

?
呼啦一阵风

TA贡献1802条经验 获得超6个赞

我的理解是,闭包是JS的底层技术之一.不管是用什么编程范式,都是初学者必须要掌握的基础.在JS中函数是一等公民,可以当做参数传递和当做返回值.平常编程会在大量的场景中使用这种方式,而这种方式就难免会遇到要处理闭包的情况,如果没有对闭包的理解,就很难得心应手的编程了.程序员不止要写代码,很大一部分工作是在维护,这就要求能看懂别人的代码.很多技术就算我们不用,也需要去掌握,否则阅读别人的代码时就无法理解别人代码的意思.
学习一项技术,不仅仅是因为要用它,而是因为我们可以在了解他的原理之后,知道什么时候要用,什么时候不用,有什么风险,如何避免这些风险,以及出现问题时明白问题出现在哪里.
函数式编程好用.
回马枪这个没看懂,一个基础技术,初学者都逃不过,只要有人还在学JS,就会有这方面的讨论吧,有可能是最近学到这部分知识的人突然变多了...
解决某一问题的方法通常都会有多种方案,每个人根据需要选择最合适自己就可以了.
使用闭包和使用对象在很多时候都可以达到一样的效果,他们相互之间经常可以相互替代.
如果是个人项目,就想用哪个用哪个.我可以在一个项目中全部使用对象,也可以全部使用闭包,还可以混着用.如果是公司或者公共的项目,那就由对这个项目有影响力的人来决定.
至于怎么决定,要看具体的限制.
像易读性这种东西是很主观,并没有哪个是唯一的标准,主要看个人喜好.如果要考虑性能的话,可能对象会比较合适.而如果考虑实现一个私有变量的话,可能闭包就更合适一点了.还要看你对两者的理解,以及所使用环境的考虑.
我觉得你可以尝试沟通下,告诉他们你的想法,了解他们这么做的理由.当然如果你对这项目有足够的影响力,也可以直接否决这种写法,比如看到这种代码的时候,代码审查直接不给他通过
如果不听你的,一意孤行,你又没有足够的影响力的话,那就只能这样了.
身为一个前端er就是要能屈能伸,不挑食.
                            
查看完整回答
反对 回复 2019-07-27
?
倚天杖

TA贡献1828条经验 获得超3个赞

我觉得,JS是基于原型模型的语言,ES6虽然提供了类,但是底层还是基于原型继承去实现的;另外,箭头函数也是个语法糖,利用的就是闭包的特性,所以想用好JS,闭包是跳不过去的。
                            
查看完整回答
反对 回复 2019-07-27
  • 2 回答
  • 0 关注
  • 264 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信