Defining and calling function in one step
Solution 1
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
.
Solution 2
If all you want is access the function within its own body, you can simply specify a name after the function
keyword:
> (function fac (n) {
return (n === 0 ? 1 : n*fac(n-1));
})(10)
3628800
This is a standard feature (see ECMA-262, ed. 5.1, p. 98).
Solution 3
All the answers here are close to what you want, but have a few problems (adding it to the global scope, not actually calling it, etc). This combines a few examples on this page (although it unfortunately requires you to remember arguments.callee
):
var test = (function() {
alert('hi');
return arguments.callee;
})();
Later, you can call it:
test();
Solution 4
If you don't care about the return value, you can do this.
var powers = function powers(i) {
var product = i * i;
console.log(i * i);
if (product < 1e6) { powers(product) };
return powers;
}(2);
Comments
-
quis almost 2 years
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.