关闭或绑定
Closure or Bind
限制器1和限制器2有区别吗?
var limiter1 = function(limiter){
return function(item){
return item > limiter;
};
};
var limiter2 = function(limiter){
return function(limiter,item){
return item > limiter;
}.bind(this,limiter);
};
在大多数情况下,它们的功能相同。然而...
如果您真正开始使用 this
的值,limiter1
返回的函数将被解除绑定(因此消费者可以通过调用 Function.prototype.bind
来更改该值).在 limiter2
中,它在最初的 bind
调用中被锁定。
此外,他们使用不同级别的范围来获取 limiter
变量。根据引擎的不同,您的性能可能会有(分钟)差异。
.bind 算法比用另一个函数包装一个函数要复杂得多。然而,大多数时候这并不重要。我认为使用本机 .bind 通常会提供更具可读性和可维护性的代码 - 这是一个很大的优势。
你可以看到更多关于这个的信息Why is bind slower than a closure?
限制器1和限制器2有区别吗?
var limiter1 = function(limiter){
return function(item){
return item > limiter;
};
};
var limiter2 = function(limiter){
return function(limiter,item){
return item > limiter;
}.bind(this,limiter);
};
在大多数情况下,它们的功能相同。然而...
如果您真正开始使用 this
的值,limiter1
返回的函数将被解除绑定(因此消费者可以通过调用 Function.prototype.bind
来更改该值).在 limiter2
中,它在最初的 bind
调用中被锁定。
此外,他们使用不同级别的范围来获取 limiter
变量。根据引擎的不同,您的性能可能会有(分钟)差异。
.bind 算法比用另一个函数包装一个函数要复杂得多。然而,大多数时候这并不重要。我认为使用本机 .bind 通常会提供更具可读性和可维护性的代码 - 这是一个很大的优势。
你可以看到更多关于这个的信息Why is bind slower than a closure?