【问题标题】:Closure or Bind关闭或绑定
【发布时间】:2015-12-18 16:15:40
【问题描述】:

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

【问题讨论】:

    标签: javascript binding closures


    【解决方案1】:

    在大多数情况下,它们的功能相同。不过……

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

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

    【讨论】:

    • 在这种情况下女巫会更快?
    • 没有单一案例,而且它是如此之小,以至于您将浪费时间在 99.9% 的案例中进行优化。
    【解决方案2】:

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

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

    【讨论】:

    • 我认为如果我已经有了包装函数(所以它不是匿名的),那么我必须使用 bind 方法,但是如果我动态创建函数,那么 bind 方法就变得不必要了。
    • 是的,我同意。
    猜你喜欢
    • 2010-09-17
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-28
    • 1970-01-01
    • 1970-01-01
    • 2011-07-14
    相关资源
    最近更新 更多