Próbuję przekazać jakiś parametr do funkcji używanej jako wywołanie zwrotne, jak mogę to zrobić?
function tryMe (param1, param2) {
alert (param1 + " and " + param2);
}
function callbackTester (callback, param1, param2) {
callback (param1, param2);
}
callbackTester (tryMe, "hello", "goodbye");
Odpowiedzi:
Jeśli chcesz czegoś nieco bardziej ogólnego, możesz użyć zmiennej arguments w następujący sposób:
Ale w przeciwnym razie twój przykład działa dobrze (argumenty [0] mogą być użyte zamiast wywołania zwrotnego w testerze)
źródło
callback.apply(arguments)
ponieważ ciało funkcji dlacallbackTester
jest rozszerzalne poza scenariusz dwóch argumentów.Działa to również:
Kolejny scenariusz:
źródło
if (typeof window[callback] == 'function') window[callback].call(this);
Twoje pytanie jest niejasne. Jeśli zastanawiasz się, jak to zrobić w prostszy sposób, zapoznaj się z metodą ECMAScript 5. edycji .bind () , która jest członkiem Function.prototype . Korzystając z niego, możesz zrobić coś takiego:
Możesz także użyć następującego kodu, który dodaje metodę, jeśli nie jest dostępna w bieżącej przeglądarce:
Przykład
bind () - Dokumentacja PrototypeJS
źródło
Array.prototype.slice.call(arguments)
iarguments.slice()
?f = function(arg1,arg2){alert(arg1+arg2);}.bind(this,"abc");
f("def") // Gives "abcdef"
Jeśli masz wywołanie zwrotne, które zostanie wywołane przez coś innego niż kod z określoną liczbą parametrów i chcesz przekazać dodatkowe parametry, możesz przekazać funkcję otoki jako wywołanie zwrotne, a wewnątrz otoki przekazać dodatkowe parametry.
źródło
Jeśli nie masz pewności, ile parametrów chcesz przekazać do funkcji zwrotnych, użyj
apply
funkcji.źródło
Zawiń przekazane funkcje „potomne” jako argumenty w opakowaniach funkcji, aby zapobiec ich ocenie, gdy zostanie wywołana funkcja „nadrzędna”.
źródło
Kod z pytania z dowolną liczbą parametrów i kontekstem wywołania zwrotnego:
źródło
Użyj funkcji curry jak w tym prostym przykładzie.
źródło
Nowa wersja dla scenariusza, w którym wywołanie zwrotne zostanie wywołane przez inną funkcję, a nie przez własny kod, i chcesz dodać dodatkowe parametry.
Na przykład, udawajmy, że masz wiele zagnieżdżonych wywołań z wywołaniami zwrotnymi powodzenia i błędów. W tym przykładzie użyję obietnic kątowych, ale każdy kod javascript z wywołaniami zwrotnymi byłby taki sam w tym celu.
Teraz możesz chcieć uporządkować kod, definiując funkcję rejestrowania błędów, zachowując źródło błędu do celów debugowania. W ten sposób przebudujesz kod:
Funkcja wywołująca nadal doda parametr błędu po parametrach funkcji wywołania zwrotnego.
źródło
Szukałem tego samego i znalazłem rozwiązanie, a oto prosty przykład, jeśli ktoś chce przez to przejść.
Wysłano również na inne pytanie tutaj
źródło
Pozwól, że dam ci bardzo prosty przykład użycia wywołania zwrotnego w stylu Node.js:
oraz HTML, który wyświetli wynik:
Możesz się nim pobawić tutaj: https://jsfiddle.net/q8gnvcts/ - na przykład spróbuj przekazać ciąg zamiast liczby: myTest („jakiś ciąg”, 6, funkcja (err, wynik) .. i zobacz wynik.
Mam nadzieję, że ten przykład pomoże, ponieważ reprezentuje on bardzo podstawowe pojęcie funkcji zwrotnych.
źródło
czytaj więcej o składni spreadu
źródło
źródło