Javascriptで関数を定義してすぐに呼び出す方法はありますか?
一度限りの匿名関数を実行できることを知っています。
_(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...
_
しかし、一度に関数を定義して呼び出すクリーンな方法はありますか?両方の例のハイブリッドのようなものですか?
これができないからといって何もできないわけではありませんが、再帰関数または$(document).ready()
で実行する必要がある関数を記述するためのニースの表現力のある方法であるように感じます変更など.
あなたが試すことができます:
_(window.powers = function(i) {
/*Code here*/
alert('test : ' + i);
})(2);
_
<a href="#" onclick="powers(654)">Click</a>
ワーキングリンク: http://jsfiddle.net/SqBp8/
ロード時に呼び出され、パラメータとalert
を変更するために_anchor tag
_に追加しました。
必要なのがそれ自体の本体内で関数にアクセスする場合、function
キーワードの後に名前を指定するだけです:
> (function fac (n) {
return (n === 0 ? 1 : n*fac(n-1));
})(10)
3628800
これは標準機能です( ECMA-262 、ed。5.1、p。98を参照)。
ここでのすべての答えはあなたが望むものに近いですが、いくつかの問題があります(実際にそれを呼び出すのではなく、グローバルスコープに追加するなど)。これは、このページのいくつかの例を組み合わせたものです(残念ながら、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);