2015-12-18 86 views
0

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

回答

1

在大多數情況下,它們的功能是相同的。然而...

如果你開始真正使用的this值,由limiter1返回的功能將未綁定(所以消費者可能會改變一起Function.prototype.bind調用的值)。在limiter2中,它的初始bind呼叫被鎖定。

此外,他們使用不同級別的範圍來獲得limiter變量。根據引擎的不同,你可能會有(分鐘)的性能差異。

+0

而巫人會在這種情況下更快? – Gel

+0

沒有一個單一的案例,它很小,你會浪費你的時間在99.9%的情況下優化。 – TbWill4321

0

.bind算法比用另一個函數包裝函數要複雜得多。但是,大部分時間並不重要。我認爲使用native .bind通常會提供更易讀和可維護的代碼 - 這是一個很大的優點。

你可以看到更多關於這Why is bind slower than a closure?

+0

我想如果我已經有包裝函數(所以它不是一個匿名),比我必須使用綁定方法,但如果我創建函數動態比綁定方法成爲不必要的。 – Gel

+0

是的,我同意這一點。 –