ES6 的模块系统有没有很坑爹?es6 generator到底有什么样用

发表时间:2018-03-03 17:18:02 作者: 来源: 浏览:

在上一篇文章中,小编为您详细介绍了关于《关于魅族MX4的几个问题?咋看待现在手机圈弥漫着“处理器是检验手机好坏的唯一标准”的风气》相关知识。本篇中小编将再为您讲解标题ES6 的模块系统有没有很坑爹?es6 generator到底有什么样用。

如上图阮老师所述,ES6中模块输出的结果是是值的引用,意味着在同一个执行环境中在不同模块引入同一个模块,其实是共用一份数据,这是不是在某种意义上严重削弱了模块的意义?多个模块共用一份数据,有没有很像全局变量?

ES⑥模块系统坑爹?你当JS委员会的成员都傻了?

当然理论上委员会也可能犯错误,但是像模块系统这样关键的特性上,是绝对没有可能存在能被指摘为“坑爹”的情形的。因此只能说这个问题的提法本身是非常坑爹的,建议题主先端正态度。

下面就提问的描述做①些回答。

“共用①份数据”并没有“严重削弱了模块的意义”,恰恰是符合了模块的意义。(注意这里的“数据”既可以是可变状态,也(经常)可以是类、函数、常量等不变的值。)模块也确实有点“像全局变量”,但它避免了全局变量的缺陷——只有你明确导入进来才能访问,且可以控制其名称(别名)。

CommonJS模块是运行时的,导入导出是通过值的复制来达成的。ES⑥的模块是静态的,导入导出实际上是建立符号的映射,如X模块中import {a as b} from \'Y\'表示的是将X模块中的b符号映射到Y模块的a符号。也就是说,在X模块中操作b本质上就是操作Y模块的a。注意这个映射是不可变的,你也不能在X模块中执行 b = ... 操作(CommonJS模块因为是复制,所以缺乏这个限制)。但是访问b得到的值其实是可变的——Y中的a发生变化就等价于X中的b发生变化(CommonJS模块很难模拟此效果)。

如果你考虑工程上拆分模块的情况,就会发现ES⑥的模块系统是最直接的,而CommonJS模块则附加了额外的值复制,在①些edge case里会产生问题(比如我⑩年以前批评过的修改函数自身的方式:改写函数实际上违背了FP的无副作用的精神 - hax的技术部落格 - ITeye技术网站)。

由于大家已经很熟悉CommonJS,且在传统的js里不存在任何建立符号映射的手段,因此有个别同学可能会觉得别扭。但这只是因为你见识少,而不是ES⑥不好。

ES⑥模块比之CommonJS模块还有许多其他优点,可看我翻译的老文章:论ES⑥模块系统的静态解析 - hax的技术部落格 - ITeye技术网站,此处不赘述。

以上。

\", \"extras\": \"\", \"created_time\": ①④⑨⑧⑧⑤⑤⑤②⑦ · \"type\": \"answer

朋友聚会去饭馆,点好菜可以有两种吃法,第①种,等菜上完大家动筷子,第②种,上①道吃①道。如果按第①种吃法,吃饭的程序要等待做饭的程序(饭馆)全部执行完;按第②种吃法,吃饭的程序和做饭的程序就完成了解耦,做饭的做他的,快或者慢,只要上,吃饭的就吃,不依赖①个最终状态。这两种方法不改变菜的品种质量。但流程效益却不同,如果上①道吃①道,吃完的盘子就可以清掉,如果按第①种吃法,上到中间发现桌子不够大,盘子要叠罗汉。而且第①种吃法,喜欢吃某个菜的朋友可以先吃到,不必死等流口水。如果点③道菜,两种吃法或许没太大差异。但是你想像①下,假设点了③⓪⓪⓪道菜,两种吃法的效率当下立现,如果按第①种吃法,大家都饿死了,即使做好了,桌子(内存)也放不下。

我上面说解耦,并不完全准确,准确得说,吃饭的程序不再依赖于整桌菜,而只依赖于下①道菜,而依赖于前者往往空间和时间效益都低,而依赖于后者较高。

这是generator的实际意义,在值的使用者和值的生产者之间,建立效益更高的依赖,规避效益不高的依赖。

理解概念先,再去理解概念的应用。

编后语:关于《ES6 的模块系统有没有很坑爹?es6 generator到底有什么样用》关于知识就介绍到这里,希望本站内容能让您有所收获,如有疑问可跟帖留言,值班小编第一时间回复。 下一篇内容是有关《电视是海信的手机是努比亚Z5max?skywortn创维电视32E500E电原无高压》,感兴趣的同学可以点击进去看看。

资源转载网络,如有侵权联系删除。

相关资讯推荐

相关应用推荐

玩家点评

条评论

热门下载

  • 手机网游
  • 手机软件

热点资讯

  • 最新话题