Kann nicht undestand, warum die Argumente von Funktionen F1000 und F1500 sind nicht auf die Wrapper-Funktion Verzögerung geben.undefinierter Wert anstelle der Argumente in der Funktion „f1 ....“
Für jetzt bekomme ich undefined anstelle der richtigen Ergebnisse von Test und Test2.
function f(x) {
console.log(x);
}
function delay(f, ms) {
return function() {
setTimeout(function(){
var delayed = f.apply(this, arguments);
return delayed;
}, ms);
}
}
var f1000 = delay(f, 1000);
var f1500 = delay(f, 1500);
f1000("test"); // must display "test"
f1500("test2"); // must display "test2"
@ savig_b.g Du hast Recht! Aber ich verstehe nicht, warum wir Argumente nicht direkt in den Timer schieben können? Danke –
Das liegt daran, dass [das Objekt 'Argumente' eine lokale Variable ist] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/arguments). Die Callback-Funktion, die an 'setTimeout' übergeben wurde, hat keine Argumente, daher erhalten Sie undefined. Eine Möglichkeit, einen äußeren Geltungsbereich zu erreichen, besteht darin, einen Abschluss zu verwenden (wie im Beispiel). Ich habe meine Antwort aktualisiert, um dies auch zu erklären. –
Vielen Dank für die Erklärung! Ich brauche wahrscheinlich mehr Übung in Schließfunktionen :) –