关闭或绑定

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 算法比用另一个函数包装一个函数要复杂得多。然而,大多数时候这并不重要。我认为使用本机 .b​​ind 通常会提供更具可读性和可维护性的代码 - 这是一个很大的优势。

你可以看到更多关于这个的信息Why is bind slower than a closure?