hax/hax.github.com

JS中的函数式编程 === 垃圾

Opened this issue · 0 comments

hax commented

http://awardwinningfjords.com/2014/04/21/functional-programming-in-javascript-equals-garbage.html

标题有点耸人,但事实上很有意思的一篇短文。

总结:

  1. 纯函数式要求避免副作用。而深拷贝会导致大量中间变量,这些中间变量是一次性的,马上就要被垃圾回收。
  2. 没有尾递归优化,会很容易导致调用栈耗尽。如果用Trampolining,每次迭代都产生一个临时函数,于是又是一堆待回收的垃圾
  3. 函数compose和partial也导致每次调用产生中间变量(临时的参数数组和partial的函数),如果用大量的函数组合式编程,就产生一堆垃圾

但是这文章也并不是说不要用函数式编程。应对上述问题的方法是:

  1. 用Mori之类提供 immutable 数据结构的库。(应该是不需要每次做深拷贝,也许用原型来共享?)
  2. 底层迭代用while/for循环——虽然不够函数式。
  3. 此条文章没给出解决方法。其实这条就是讲创建闭包的代价,单纯函数组合本身并不是问题。

该文结论:Never forget that Javascript hates you.