It isn't a function.
(function() {
...
})()
evaluates the anonymous function right then. And the result of the evaluation apparently does not return a function-object in this case :-)
Consider:
f = (function() {
return "not a function :("
})()
alert(f())
and
f = (function() {
return function () { return "Yay!" }
})()
alert(f())
Happy coding :)
Here is a function which will "execute something once" and then "return that something to execute later". (See "You can either [assign] a function or call it; you can't do both..." from Slaks answer.) However, I wouldn't do it like this.
Init = (function () {
function Init () {
alert("whee!")
}
Init()
return Init
})()
Init()
Here is another solution (much shorter/cleaner) from CD Sanchez (see comment) which takes advantage of the fact that an assignment evaluates to the assigned value:
var Init; (Init = function Init () {
alert ("wee");
})()
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…