habe ich so etwas wie die folgenden haben ...Zuweisen von Funktionen zu Variablen in Javascript?
var setFoo = function (value1) {
window.localStorage.setItem('foo1', value1);
}
var setFoo2 = function (value2) {
window.localStorage.setItem('foo2', value2);
}
.. aber fand ich, dass ich immer wieder ...
window.localStorage.setItem('something', value);
tat ... so habe ich beschlossen, es zu drehen in eine Funktion ...
function genericSetFoo(name, value) {
window.localStorage.setItem(name, value);
}
... und die folgende Stelle haben ...
var setFoo = genericSetFoo('foo1', value1);
var setFoo2 = genericSetFoo('foo2', value2);
... aber jetzt, wenn ich versuche setFoo1(value1)
oder setFoo2(value2)
zu nennen, die Anwendung klagt über value1
und value2
undefined
zu sein. Was mache ich falsch? Ich meine, ich könnte noch tun ...
var setFoo = function(value1) { genericSetFoo('foo1', value1) };
var setFoo2 = function(value2) { genericSetFoo('foo2', value2) };
... und es funktioniert auch ... aber es Niederlagen der ganze Sinn, wenn ich die Funktion in jedem Fall neu zu definieren haben. Wie gehe ich damit um?
Oh, danke. Das ist wirklich interessant. Dies scheint für mein gegenwärtiges Verständnis die verständlichste Lösung zu sein. Einige der anderen Benutzer haben jedoch etwas über "currying" oder "partielle Anwendung" erwähnt ... Was sagen Sie dazu im Vergleich? Geschätzt. – Grateful
Okay, ich habe gerade gemerkt, dass deine Methode tatsächlich ein Beispiel für Curry war. Aber wie unterscheidet sich das von der '.bind' Technik? – Grateful
@Graeful: Dies erfordert keine zusätzlichen Sprachfunktionen (wie ES5 '.bind()') und funktioniert bis zur ursprünglichen Netscape-Version von JavaScript und der ursprünglichen IE-Version von jscript. Wenn Sie einmal verstanden haben, wie Funktionen und Schließungen funktionieren, können Sie zusätzliche Sprachfunktionen wie '.bind()' selbst implementieren. – slebetman