Can I name a JavaScript function and execute it immediately?
function, javascript
Solution
There's nothing wrong with the example you posted in your question.. The other way of doing it may look odd, but:
var addEventsAndStuff;
(addEventsAndStuff = function(){
// add events, and ... stuff
})();
There are two ways to define a function in JavaScript. A function declaration:
function foo(){ ... }
and a function expression, which is any way of defining a function other than the above:
var foo = function(){};
(function(){})();
var foo = {bar : function(){}};
...etc
function expressions can be named, but their name is not propagated to the containing scope. Meaning this code is valid:
(function foo(){
foo(); // recursion for some reason
}());
but this isn't:
(function foo(){
...
}());
foo(); // foo does not exist
So in order to name your function and immediately call it, you need to define a local variable, assign your function to it as an expression, then call it.
Problem
I have quite a few of these: ``` function addEventsAndStuff() { // bla bla } addEventsAndStuff(); function sendStuffToServer() { // send stuff // get HTML in response // replace DOM // add events: addEventsAndStuff(); } ``` Re-adding the events is necessary because the DOM has changed, so previously attached events are gone. Since they have to be attached initially as well (duh), they're in a nice function to be DRY. There's nothing wrong with this set up (or is there?), but can I smooth it a little bit? I'd like to create the `addEventsAndStuff()` function and immediately call it, so it doesn't look so amateuristic. Both following respond with a syntax error: ``` function addEventsAndStuff() { alert('oele'); }(); (function addEventsAndStuff() { alert('oele'); })(); ``` Any takers?