Aanroepen van een functie met anonieme functies als parameters

Status
Niet open voor verdere reacties.

antonwas

Gebruiker
Lid geworden
11 nov 2006
Berichten
254
Beste lezers,

Op dit moment ben ik bezig om te leren werken met anonieme functies. Ik heb het volgende simpele voorbeeldje:

Code:
function invoke_and_add(function(){return 1;}, function(){return 2;})    {
    return arguments[0]+arguments[1];
}
invoke_and_add();

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).

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
 
Een normale functie roep je namelijk aan via functieNaam(arg1, arg2, arg3, enz.)
Klopt :) 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:
[JS]function name(param1, param2, etc) {
//Function body
}[/JS]
Let op: param1, param2, etc. zijn hier geen expressies, maar identifiers ('variabelen').

Er is dus een verschil in functieaanroep en functiedefinitie ;) De eerste heeft expressies tussen de haakjes, de tweede heeft identifiers.

Een herschrijving van je programma kan er zo uit zien:
[JS]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.[/JS]
 
Laatst bewerkt:
Dank voor je uitleg!

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
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan