Defining and calling function in one step

quis picture quis · Sep 21, 2011 · Viewed 37.1k times · Source

Is there a way in Javascript to define a function and immediately call it, in a way that allows it to be reused?

I know you can do one-off anonymous functions:

(function(i) {
    var product = i * i;
    console.log(product);
    // Can't recurse here because there's no (ECMA standard) way for the 
    // function to refer to itself
}(2)); // logs 4

Or you can name a function then call it afterwards:

function powers(i) {
    var product = i * i;
    console.log(i * i);
    if (product < 1e6) { powers(product) };
}

powers(2); // Logs 4, 16, 256...

But is there a cleaner way of defining and calling a function in one go? Sort of like a hybrid of both examples?

Not being able to do this isn't preventing me from doing anything, but it feels like it would be a nice expressive way to write recursive functions or functions that need to be run on $(document).ready() but also later when situations change, etc.

Answer

Marc Uberstein picture Marc Uberstein · Sep 21, 2011

You can try:

(window.powers = function(i) {
  /*Code here*/
  alert('test : ' + i);
})(2);
<a href="#" onclick="powers(654)">Click</a>

Working link : http://jsfiddle.net/SqBp8/

It gets called on load, and I have added it to an anchor tag to change the parameter and alert.