JavaScript学习笔记-函数柯里化

最近《JavaScript语言精粹》这本书看到函数一章,提到了函数柯里化。之前在别的博客里也见过,没有仔细留意,只觉得好抽象的名词,略过…这次仔细地读了一遍,写篇博客记录下来防止有记忆的脑细胞躲起来不见我了。

柯里化是什么

看了半天,柯里化应该就是,本来一个函数接受多个参数,柯里化之后变成传单一参数进来,但是会用上原来一串参数合在一起,返回一个最终的结果。其实也就是原来传进来的参数通过闭包保存下来,再加上新的参数进行处理。
啥都不说了,先上个书中的例子:

43

调用一下:

43

这里要注意,arguments作为函数默认传入的参数,它并不是一个数组,而真实的身份是对象。所以method这个函数要写成下面这个样子,是运行不出来滴。

43

所以输出的结果第一遍有个报错提示,第二遍就有结果了。

43

为什么要柯里化

好好的函数,if else写出来也可以运行的稳稳的,为什么要用这种抽象的技巧来实现呢?《语言精粹》柯里化这里也就小半页,只讲了个add函数相关的例子。还是拿大红宝书-高级程序设计对比一下看看。

与柯里化最相关的是函数绑定,柯里化基本方法和函数绑定是一样的。唯一不同的是柯里化调用了一个函数,返回的函数需要在传入参数。

说了半天,到底能应用在什么地方呢?看了挺多相关内容对柯里化的作用都解释的不是很清楚。能想到到就是减少函数复用. 另外在ES5中,bind()函数也用到了。IE’6~8不能使用bind()函数,自己写的话就是下面这样子:

43