Czy można przekazać funkcję javascript z parametrami jako parametrem?
Przykład:
$(edit_link).click( changeViewMode( myvar ) );
javascript
Lucia
źródło
źródło
Odpowiedzi:
Użyj „zamknięcia”:
Tworzy to anonimowe opakowanie funkcji tymczasowej, które wie o parametrze i przekazuje go do rzeczywistej implementacji wywołania zwrotnego.
źródło
this.myFunction = this.myFunction.bind(this)
w swojejconstructor
metodzie. Ale, jak powiedziałeś, kiedy musisz przekazać do niego różne konteksty dla każdego z nich, na przykład wszystkie różne wiersze, które klikasz, aby otworzyć stronę szczegółów tego wiersza, nie można tego uniknąć.Użyj
Function.prototype.bind()
. Cytując MDN:Jest obsługiwany przez wszystkie główne przeglądarki, w tym IE9 +.
Twój kod powinien wyglądać następująco:
Uwaga dodatkowa: zakładam, że jesteś w kontekście globalnym, tj.
this
Zmienna jestwindow
; w przeciwnym razie użyjthis
zamiastnull
.źródło
$.ajax(url).done(handler.bind(this, var1, var2));
Nie, ale możesz przekazać jeden bez parametrów i zrobić to:
Więc przekazujesz anonimową funkcję bez parametrów, która następnie wywołuje sparametryzowaną funkcję ze zmienną w zamknięciu
źródło
Tak, tak:
źródło
Lub jeśli używasz es6, powinieneś być w stanie użyć funkcji strzałki
źródło
Możesz to zrobić
i wtedy
Lub jeśli twój callback zawiera bardziej elastyczną logikę, możesz przekazać obiekt.
Próbny
źródło
Oto przykład zgodny z podejściem Ferdinanda Beyera:
W tym przykładzie „wartość parametru” jest przekazywana z funkcji 1 do funkcji 3 poprzez funkcję 2 przy użyciu zawijania funkcji.
źródło