关闭或绑定

时间:2015-12-18 16:15:40

标签: javascript binding closures

限制器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);
};

2 个答案:

答案 0 :(得分:1)

在大多数情况下,它们的功能相同。然而...

如果您开始实际使用this的值,limiter1返回的函数将被解除绑定(因此,消费者可以通过调用Function.prototype.bind来更改该值)。在limiter2中,它被初始bind调用锁定。

此外,他们使用不同级别的范围来获取limiter变量。根据引擎的不同,您可能会有(微小)性能差异。

答案 1 :(得分:0)

.bind算法比用另一个函数包装函数要复杂得多。但是,大部分时间都没关系。我认为使用native .bind通常会提供更易读和可维护的代码 - 这是一个很大的优势。

您可以详细了解此Why is bind slower than a closure?