関数が戻り値に依存していない場合は、これを行うことができます...
var foo = (function bar() {
alert('hello');
return bar;
})(); // hello
foo(); // hello
bar
これは、名前付き関数式のローカル参照を使用して、関数を外部foo
変数に返します。
または、そうであっても、戻り値を条件付きにすることができます...
var foo = (function bar() {
alert('hello');
return foo ? "some other value" : bar;
})(); // hello
alert( foo() ); // hello --- some other value
または、返す代わりに変数に手動で割り当てるだけです...
var foo;
(function bar() {
alert('hello');
foo = bar;
})(); // hello
foo(); // hello
@RobGで指摘されているように、IE の一部のバージョンでは、識別子が外側の変数スコープにリークされます。その識別子は、作成した関数の複製を参照します。NFE IE-safe(r) を作成するには、その参照を無効にすることができます。
bar = null;
識別子は、スコープチェーンの同じ名前の識別子を引き続きシャドウすることに注意してください。無効化は役に立たず、ローカル変数は削除できないため、NFE 名は慎重に選択してください。