javascriptjqueryfunctionscope

Run a function inside a function


I have this:

function cool(){
   function alsocool(){

   }
}

And I run the cool() on button click:

$(selector).on('click', function(){
 cool();
}

How can I run the cool() and the alsocool() from the same click? Note that I don't want to do:

function cool(){
   function alsocool(){

   }
   alsocool();
}

If I do :

$(selector).on('click', function(){
     cool(); alsocool();
    }

it doesn't work.

Is it possible to run a function inside a function on the same call?

EDIT:

I DO WANT to pass cool() since obviously alsocool() is not recognized once its inside function cool() BUT cool(); is passed from many selector thus I want to know from which selector is passed and take the appropriate action.

Example I want something like this:

function cool(){

// If this was called by button1, run alsocool() else bypass it
       function alsocool(){

       }
// some code goes here

}

$("#button1").on('click', function(){
         cool(); alsocool();
         // If button1 clicked, run cool AND alsocool
        }
$("#button2").on('click', function(){
         cool(); // If button2 clicked, run cool ONLY.
    }

Solution

  • The answer is simple: It is impossible.
    The inner function is local to the containing function's scope so unless that function calls it, it cannot be called at all.

    If you want both functions to be reachable from outside, define alsocool outside cool, i.e. on the same level as cool.


    As per your comment, here's a way that would use a parameter to determine if the inner function should be called or not:

    function cool(callInner){
        function alsocool(){
    
        }
        if(callInner) {
            alsocool();
        }
    }