[JS] function in function
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//this function adds 3 to the number passed in
function addThree(x) {
return x + 3;
}
//this function takes a function and returns
//a function that runs the function it was passed,
//and then runs that function _again_ on the return
//value of the first call to the function.
//make sense? look at it until it does.
function composed(func) {
return function(x) {
return func(func(x))
}
}
composed(addThree)(4);
//what does that return?
var answer = ;
function addThree(x) {
return x + 3;
}
//this function takes a function and returns
//a function that runs the function it was passed,
//and then runs that function _again_ on the return
//value of the first call to the function.
//make sense? look at it until it does.
function composed(func) {
return function(x) {
return func(func(x))
}
}
composed(addThree)(4);
//what does that return?
var answer = ;
wat is de uitkomst van composed nu.. ? oftewel hoe bereken je dit?
Als we dus de functie composed aanroepen krijgen we een functie terug.
Vervolgens kunnen we die functie weer aanroepen:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
function composed(...) {
return function(...) {
return 'foo';
};
};
var a = composed(...);
a(); // wordt 'foo'
return function(...) {
return 'foo';
};
};
var a = composed(...);
a(); // wordt 'foo'
Wat wordt er nou in die functie die teruggegeven wordt?
We pakken als functie de functie die wordt opgegeven als parameter van de composed functie. Vervolgens zien we deze functie wordt aangeroepen met de parameter van de functie die geretourneerd wordt. Kortom:
Maar nu zien we dat we niet func(x) hebben maar func(func(x)). Dit betekend dat eerst func(x) wordt aangeroepen, deze geeft wat terug (x + 3). Daarna wordt deze waarde weer als x waarde van de volgende functie gebruikt, die dus weer 3 bij x + 3 optelt.
Bij elkaar geeft func(func(x)) dus: (x + 3) + 3 = x + 6 Terug. We hebben nu dus:
Als laatst combineren we deze 2 regel tot 1 regel:
Gewijzigd op 29/10/2012 18:58:41 door Wouter J
Ah dat is wel wat duidelijker :p ik raakte een beetje in de war met een functie returnen.. maarja wat kan niet met JS? :p
Code (php)
Het kromme van PHP is alleen dat het functies anders ziet als variabele, in JS is dat wat beter geregeld.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
var name;
var totalScore;
var gamesPlayed;
var player;
var score;
//First, the object creator
function makeGamePlayer(name,totalScore,gamesPlayed) {
//should return an object with three keys:
// name
// totalScore
// gamesPlayed
o = {
'name' : name,
'totalScore' : totalScore,
'gamesPlayed' : gamesPlayed
};
return o;
}
//Now the object modifier
function addGameToPlayer(player,score) {
//should increment gamesPlayed by one
//and add score to totalScore
//of the gamePlayer object passed in as player
gamesPlayed += 1;
totalScore += score;
}
var totalScore;
var gamesPlayed;
var player;
var score;
//First, the object creator
function makeGamePlayer(name,totalScore,gamesPlayed) {
//should return an object with three keys:
// name
// totalScore
// gamesPlayed
o = {
'name' : name,
'totalScore' : totalScore,
'gamesPlayed' : gamesPlayed
};
return o;
}
//Now the object modifier
function addGameToPlayer(player,score) {
//should increment gamesPlayed by one
//and add score to totalScore
//of the gamePlayer object passed in as player
gamesPlayed += 1;
totalScore += score;
}
hoe geef ik in de 2e functie de berekeningen door aan de juiste player? gewoon zoiets als
of heb je hier een andere handige manier voor?