大多数使用枚举器方法的库(我认为是本机JavaScript)允许为迭代器传递context
。
function reduce(iterator, memo, context){
this.each(function(item, idx, list){
memo = iterator.call(context, memo, item, idx, list)
});
return memo;
}
问题是为什么bind
可以轻松提供相同的功能?
stooges.reduce(function(memo, stooge){
...
}, context) // as argument vs...
stooges.reduce(function(memo, stooge){
...
}.bind(context))
这是暂时存在的东西,因为bind
并非在所有平台上都可用吗?或者仅仅是因为call
的开销比bind
更少?我总是读到函数越少越好。这是一个服用0 args的函数比服用1的函数优于服用2的函数
答案 0 :(得分:2)
使用.bind
创建并返回一个新函数。在某些情况下,您更喜欢限制javascript VM创建的对象/变量的数量,以便利用垃圾收集器清理周期。
此外,已知bind
比“模拟”绑定解决方案慢得多(使用call
和apply
):Why is Function.prototype.bind slow?
否则,将上下文作为参数传递通常更好,更具可读性。
ES6箭头功能可以保留词汇this
,因此更容易:
// considering object context
var self = this;
stooges.reduce((memo, stooge) => (this === self));