javascript - Sende en funksjon med argumenter som et argument?
Er det mulig å sende en JavaScript-funksjon med argumenter som et argument?
Eksempel :
$(edit_link).click( changeViewMode( myvar ) );
Svar #1
Bruk en «lukking»:
$(edit_link).click(function(){ return changeViewMode(myvar); });
Dette oppretter en anonym midlertidig funksjonsinnpakning som kjenner til parameteren og sender den til den faktiske callback-implementeringen.
Svar #2
Bruk Function.prototype.bind(). Siterer MDN:
Metoden
bind()oppretter en ny funksjon som, når den kalles, har sittthis-nøkkelord satt til den oppgitte verdien, med en gitt sekvens av argumenter som kommer før eventuelle som oppgis når den nye funksjonen kalles.
Det støttes av alle store nettlesere, inkludert IE9+.
Koden din bør se slik ut:
$(edit_link).click(changeViewMode.bind(null, myvar));
Biknot: Jeg antar at du er i global kontekst, dvs. at this-variabelen er window; ellers bruk this i stedet for null.
Svar #3
Nei, men du kan kalle en uten parametere, og gjøre dette:
$(edit_link).click(
function() { changeViewMode(myvar); }
);
Så du sender en anonym funksjon uten parametere, den funksjonen kaller deretter din parameteriserte funksjon med variabelen i lukket området
Svar #4
Eller hvis du bruker es6, bør du kunne bruke en pilfunksjon
$(edit_link).click(() => changeViewMode(myvar));
