一步定义和调用function

有没有在Javascript中定义一个函数的方法,并立即调用它,使其可以重用?

我知道你可以做一次性的匿名function:

(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 

或者你可以命名一个函数然后调用它:

 function powers(i) { var product = i * i; console.log(i * i); if (product < 1e6) { powers(product) }; } powers(2); // Logs 4, 16, 256... 

但是有一种更清晰的方式来定义和调用一个function吗? 有点像两个例子的混合?

不能做到这一点并不妨碍我做任何事情,但感觉这将是一个很好的expression方式来编写recursion函数或function,需要在$(document).ready()上运行,但也可以在以后情况变化等

你可以试试:

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

如果你想要的只是访问函数内部的函数,你可以简单地在function关键字后面指定一个名字:

 > (function fac (n) { return (n === 0 ? 1 : n*fac(n-1)); })(10) 3628800 

这是标准function(参见ECMA-262 ,版本5.1,第98页)。

这里的所有答案都接近你想要的,但有一些问题(将其添加到全局范围,而不是实际调用它等)。 这结合了这个页面上的一些例子(尽pipe它不幸的是需要你记住arguments.callee ):

 var test = (function() { alert('hi'); return arguments.callee; })(); 

稍后,您可以调用它:

 test(); 

如果你不关心返回值,你可以这样做。

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