因此,JavaScript的bind支持赛跑,但大多数人使用其他库(如lodash或ramda )来进行赛跑。
从第一印象来看,bind似乎支持上下文更改,因为这是它的预定角色。
var replaceTest = replace.bind(this, 'test')
replaceTest('beta', environments)其他的咖喱方法没有这个。
var replace = _.curry(function (a, b, list) {
// implementation
})
var replaceTest = replace('test')
replaceTest('beta', environments)那么,这两种方法还有什么区别吗?我主要想知道,当存在一个本机实现时,使用这些实现之一是否有意义。
发布于 2015-07-20 18:34:55
bind()实际上不做赛跑。它所做的是部分应用。lodash和rambda有一个名为_.partial()的方法,它在不设置上下文对象的情况下执行部分应用程序。
如果用一个或多个参数调用f等于用一个参数调用f,然后用下一个参数调用返回值,那么函数f就会被匆忙处理,以此类推,直到参数用完为止。运行可以通过部分应用程序来实现,但这是另一回事。
如果您真的想要一个咖喱函数,最好使用这些库中的一个,而不是使用自己的库。如果您想要的只是部分应用程序,那么bind()应该足够好,但是如果您已经使用了一个库,如lodash或rambda,我会考虑使用_.partial()。另外,值得注意的是,对各种函数来说,运行并不是很好。
P.S. 这篇博文解释得更好。.
https://softwareengineering.stackexchange.com/questions/290242
复制相似问题