[JS] function in function

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Reshad F

Reshad F

29/10/2012 18:08:53
Quote Anchor link
ik probeer mijn Javascript bij te spijkeren en ik krijg in een opdrachtje het volgende waar ik niet uitkom..

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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 = ;


wat is de uitkomst van composed nu.. ? oftewel hoe bereken je dit?
 
PHP hulp

PHP hulp

25/11/2024 18:55:39
 
Wouter J

Wouter J

29/10/2012 18:57:44
Quote Anchor link
Nou we doen het gewoon stap voor stap:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
function composed(...) {
    return function(...) {
        // ...
    };
}

Als we dus de functie composed aanroepen krijgen we een functie terug.

Vervolgens kunnen we die functie weer aanroepen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
function composed(...) {
    return function(...) {
        return 'foo';
    };
};

var a = composed(...);
a(); // wordt 'foo'


Wat wordt er nou in die functie die teruggegeven wordt?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
function(x) {
    return func(x); // versimpelt
}


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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
var myFunc = composed(addThree); // function
myFunc(4); // roept addThree(4) aan


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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
var myFunc = composed(addThree); // function

myFunc(4); // geeft 4 + 6 = 10 terug


Als laatst combineren we deze 2 regel tot 1 regel:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
var a = composed(addThree);
a(4);
// wordt
composed(addThree)(4);
Gewijzigd op 29/10/2012 18:58:41 door Wouter J
 
Reshad F

Reshad F

29/10/2012 20:20:00
Quote Anchor link
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
 
Wouter J

Wouter J

29/10/2012 20:38:31
Quote Anchor link
PHP kan dat ook:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
function addThree($x) {
    return $x + 3;
};

function
composed($func) {
    return function($x) {
        return $func($func($x));
    };
}


$answer = composed('addThree')($x);
?>


Het kromme van PHP is alleen dat het functies anders ziet als variabele, in JS is dat wat beter geregeld.
 
Reshad F

Reshad F

29/10/2012 21:14:01
Quote Anchor link
oke het volgende dan..

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
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;
    
}


hoe geef ik in de 2e functie de berekeningen door aan de juiste player? gewoon zoiets als

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
if(player == name) {
// code uitvoeren
}


of heb je hier een andere handige manier voor?
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.