Passing Functions as Arguments part 2

Still having difficulty getting your head around passing function values as arguments to other functions? Try these examples with explanantions.

// doSomething defined as a function expression
var doSomething = function (passedFunction) {
    // call the function parameter that was passed as
    // an argument to doSomething
    passedFunction(); // i.e. hello(), goodbye() or any other function
};
 
// just a normal function declaration which we
// will pass to doSomething
function hello() {
    alert("Hello");
}
 
// another function we could pass to doSomething
function goodbye() {
    alert("Goodbye");
}
 
// run doSomething with hello as its argument
doSomething(hello);
 
// hello is passed to the passedFunction param of doSomething
// inside of doSomething its as if it said hello() instead of 
// passedFunction(). By using the passedFunction variable we 
// can pass any function we like to doSomething

In the previous example we simply ran a function inside doSomething. We didn’t need to return it, we just executed it because it was just a simple function that alerted a string of text. Its simple enough for illustration purposes but more likely we would have a different kind of function and we would want to return a value. Consider this modified example.

// hello function modified to RETURN a value instead of alerting
// so we'll make doSomething return THOSE values
 
var doSomething = function(paramOne, paramTwo, passedFunction) {
    // return the result of calling the function
    return passedFunction(paramOne, paramTwo);  
};
 
function hello(a, b) {
    return "Hello " + a +  " " + b;
}
 
// run doSomething with hello as its argument
var foo = doSomething("Tedwood", "Peacock", hello);
alert(foo);
 
// What did we just do?
// we execute doSomething with 3 arguments
// the third of those arguments will go into the 
// passedFunction param
// in other words the function that runs inside doSomething 
// will be the hello function
// the first 2 arguments to doSomething will become the 2
// arguments supplied to the hello function
// the hello function returns the string "Hello" concatenated
// with the other 2 arguments
// so what we end up doing inside doSomething is effectively
// the following:
return hello("Tedwood", "Peacock");
// This returns the string "Hello Tedwood Peacock"
// that string then gets returned from doSomething and placed 
//into the foo variable
// then we alert the contents of that variable

If thats still not clear, consider the following:

    var doSomething = function(paramOne, paramTwo, passedFunction) {
        // execute the passed function and put result in bar
        var bar = passedFunction(paramOne, paramTwo);
        return bar;
    };
     
    function hello(a, b) {
        var str = "G,day " + a +  " " + b;
        return str;
    }
     
    // declare empty variable foo
    var foo;
     
    // run doSomething and put result in foo
    foo = doSomething("Tedwood", "Peacock", hello);
     
    // now do whatever you want with foo. 
    // Alert it, log it, write it to the page or
    // pass it to another variable or function etc
    alert(foo);
     
    // I like to visualise it by working backwards
     
    // run hello("Tedwood", "Peacock");
    // that gives the string "G,day Tedwood Peacock"
    // put that string in the variable bar
    // return that string to the variable foo