Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Calling a function that's defined inside a function

*Is there a way to call a function defined inside another function in javaSCRIPT? For example:

window.onload() = function() {
    function my_function(){
        print("Blah");
    };
};

function function_two(){
    my_function();
};

Is there a way to do something like the above (calling my_function in function_two even though it's defined inside the window.onload() function)? In my actual code, which also uses the raphael.js library, I'm trying to write a button in HTML, which using the onClick function, calls a function(like function_two) that runs the function defined in window.onload() (like my_function). However the console says that the my_function is undefined.

like image 848
tkrishnan Avatar asked Jul 21 '11 23:07

tkrishnan


3 Answers

The scope of the function is the core issue here, as Zeychin and Trevor have said. I thought I'd offer another way of handling it. Basically, you can set your function to a variable that's in a higher scope (that is, accessible to both the onload and function_two functions), while defining it inside the onload function as you originally have:

var myFunction; //This is the placeholder which sets the scope

window.onload() = function() {
   myFunction = function() { //Assign the function to the myFunction variable
      print('blah');
   }
}

function function_two() {
   myFunction();
}

This might be handy if you only know the information you need for myFunction once you're in the onload event.

like image 178
Ben Hull Avatar answered Sep 21 '22 17:09

Ben Hull


You can not do what you are asking to do. The function my_function()'s scope is only within the anonymous function, function(). It falls out of scope when the method is not executing, so this is not possible. Trevor's answer is the way to do this.

like image 43
Zéychin Avatar answered Sep 20 '22 17:09

Zéychin


window.onload = function() {
    my_function()
};

function my_function(){
    alert("Blah");
};

function function_two(){
    my_function();
};
like image 31
Trevor Avatar answered Sep 21 '22 17:09

Trevor