我曾經有過類似下面的...將函數賦值給javascript中的變量?
var setFoo = function (value1) {
window.localStorage.setItem('foo1', value1);
}
var setFoo2 = function (value2) {
window.localStorage.setItem('foo2', value2);
}
。但是,我發現,我經常做...
window.localStorage.setItem('something', value);
......所以我決定把它成函數...
function genericSetFoo(name, value) {
window.localStorage.setItem(name, value);
}
...並已取代以下...
var setFoo = genericSetFoo('foo1', value1);
var setFoo2 = genericSetFoo('foo2', value2);
...但是,現在當我嘗試撥打setFoo1(value1)
或setFoo2(value2)
時,申請投訴value1
和value2
爲undefined
。我究竟做錯了什麼?我的意思是我仍然可以做...
var setFoo = function(value1) { genericSetFoo('foo1', value1) };
var setFoo2 = function(value2) { genericSetFoo('foo2', value2) };
...和它的作品太...但它違背了整點,如果我要重新在任何情況下的功能。那麼我該如何解決這個問題呢?
哦,謝謝。這真的很有趣。這似乎是我目前理解的最易理解的解決方案。然而,其他一些用戶已經提到了一些關於「咖喱」或「部分應用」的內容......與此相比,你對此有何評論?讚賞。 – Grateful
好的,我剛剛意識到你的方法實際上也是一個咖啡的例子。但是,這是如何推遲'.bind'技術的呢? – Grateful
@Grateful:這不需要額外的語言功能(如ES5'.bind()'),並且可以一直回到原始的Netscape版本的JavaScript和IE的jscript原始版本。另外,一旦你瞭解了函數和閉包的工作方式,你可以自己實現其他的語言特性,例如'.bind()'。 – slebetman