闭包的一个用途:函数柯里化(局部化)
概念
柯里化, Currying(局部化),是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。
用途
- 分步, 例如加法
1 2 3 4 5 6 7 8 9 10 11
| function add(a, b) { return a + b } add(1, 2)
function curryingAdd(a) { return function (b) { return a + b } } curryingAdd(1)(2)
|
- 参数复用, 如正则匹配
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| function check(reg, text) { return reg.test(text) } check(/jj/, 'jj') check(/jj/, 'tt')
function curringCheck(reg) { return function (text) { return reg.test(text) } } let checkFunc = curringCheck(/jj/) checkFunc('jj') checkFunc('js')
|
- 延迟运行
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| Function.prototype.bind = function () { var self = this var context = [].shift.call(arguments) var args = [].slice.call(arguments)
return function () { var pars = [].concat.call(args, [].slice.call(arguments)) self.apply(context, pars) } }
window.a = 1 window.b = 2 function log() { console.log(this.a, this.b) } let k = log.bind(window) k()
|
像我们 js 中经常使用的 bind,实现的机制就是 Currying
-
版权声明: 本博客所有文章除特别声明外,均采用
CC BY 4.0 CN协议
许可协议。转载请注明出处!
Жизнь, как качели - то вверх, то вниз.