Beste lezers,
Op dit moment ben ik bezig om te leren werken met anonieme functies. Ik heb het volgende simpele voorbeeldje:
Het is de bedoeling dat deze functie de return value van de eerste anonieme functie (eerste argument) optelt bij de return value van anonieme functie 2 (tweede argument).Code:function invoke_and_add(function(){return 1;}, function(){return 2;}) { return arguments[0]+arguments[1]; } invoke_and_add();
De vraag is nu: hoe roep ik de functie invoke_and_add() op een juiste manier aan. Omdat deze functie bij z'n definitie twee anonieme functies als parameters heeft die in dit geval beide hard coded return values hebben (1 en 2), is dit voor mij niet duidelijk. Een normale functie roep je namelijk aan via functieNaam(arg1, arg2, arg3, enz.). Hoe werkt dat bij een functie als deze?
Groet,
Anton
KloptEen normale functie roep je namelijk aan via functieNaam(arg1, arg2, arg3, enz.)Houd daarbij in gedachten dat arg1, arg2, etc. ook expressies kunnen zijn. Tot expressies behoren ook anonieme functies.
Het voorbeeld dat je geeft is syntactisch niet helemaal correct. Een functie definieer je zo:
Let op: param1, param2, etc. zijn hier geen expressies, maar identifiers ('variabelen').Javascript Code:
1 2 3 function name(param1, param2, etc) { //Function body }
Er is dus een verschil in functieaanroep en functiedefinitieDe eerste heeft expressies tussen de haakjes, de tweede heeft identifiers.
Een herschrijving van je programma kan er zo uit zien:
Javascript Code:
1 2 3 4 5 6 7 function invoke_and_add(f1, f2) { return arguments[0]() + arguments[1](); //Let op de haakjes: arguments[0] is een functie, en met 'arguments[0]()' roep je die functie aan. //Hierboven is hetzelfde als return f1() + f2(); } invoke_and_add(function() {return 1;}, function() {return 2}); //Roep de gedefinieerde functie aan, en geef twee expressies (hier anonieme functies) mee.
Laatst aangepast door Robin S : 13 juni 2012 om 17:09
Beste Robin S,
Dank voor je heldere uitleg! Het voorbeeldje wat ik gaf was afkomstig uit een Engelstalig boek over JavaScript. Dat maakte het een beetje moeilijk voor mij. Met jouw Nederlandstalige uitleg begrijp ik het.
Groet,
Anton