2015-11-12 55 views
4

我知道這可以使用基本的閉包,但我想看看如何使用.bind()來更好地理解這個函數方法。看到這個示例代碼:在一個函數上使用.bind(),並將一些參數設置爲常量,但不設其他值,JavaScript

function add (a, b) { 
    return a + b; 
} 

var addTwo = multiply.bind(this, 2); 

addTwo(10); // returns 12 

這似乎工作正常。但是,是否有可能使用.bind()來做同樣的事情,但是將第二個參數設置爲固定值,而不改變第一個參數?

我嘗試以下操作:

function add (a, b) { 
    return a + b; 
} 

var addThree = multiply.bind(this, null, 3); 

addThree(10); // returns 10, presumably because null + 10 === 10 

有沒有一種方法來挑選哪些參數來設置和使用.bind離開()?

+0

有趣的是,這實際上是C++ 11針對它自己的'bind'實現的目標。儘管如此,這不是一件容易用更動態的語言來完成的事情。 – Katana314

+0

這不是[currying](https://en.wikipedia.org/wiki/Currying#Contrast_with_partial_function_application),這只是部分應用 – Bergi

回答

3

_.partial確實做到了這一點,_作爲佔位符,即addThree = _.partial(multiply, _, 3); its implementation涉及跟蹤部分佔位符的位置。雖然它是一個很棒的閱讀,但它確實涉及一個圖書館。它是目前最接近JS的位置參數綁定。

+0

這看起來不錯,謝謝。它只是沒有一個選項來修改'this'的上下文,就像.bind做的那樣 – jmancherje

+1

鏈接它:'_.bind(_。partial(...),this)'(實際語法可能不同) – Brian

+1

@jmancherje :'_.partial(multiply,_,3).bind(this)'或'_.partial(multiply.bind(this),_,3)'應該可以工作。 –

2

按照documentation,無:

綁定()方法創建一個新的功能,調用它時,具有其this關鍵字設置爲所提供的值,具有的參數在給定序列前面的任何在調用新函數時提供。

重點礦。)

2

No.既不ES6

畢竟,JavaScript中的任何值(例如nullundefined,...)都可以用作函數的參數。爲了做這樣的事情,你需要類似於C++ 11的std::placeholders

相關問題