関数は何も返さないため、戻り値はundefined
です。
自己実行関数が実行され、関数はどこにも保存されません。戻り値のみが残ります (および関数が設定/変更する外部変数)。
たとえば、このコードは次と同等var x = 'hi';
です。
var x = (function(){
return 'hi';
})();
自己呼び出し関数の目的は通常、新しいスコープを作成することです。たとえば、ループ内でコールバック関数を作成する場合などです。
for(var i = 0; i < 5; i++) {
window.setTimeout(function(){ alert('i = ' + i); }, 1000 * i);
}
これはすべてのコールバックで同じものを使用するi
ため、アラートがi = 5
5 回発生します。
for(var i = 0; i < 5; i++) {
(function(i) {
window.setTimeout(function(){ alert('i = ' + i); }, 1000 * i);
})(i);
}
自己実行関数を使用して新しいスコープを作成しi
、各ループで新しいスコープを作成します。
自己実行関数のもう 1 つの用途は、特定の変数が確実に使用可能になり、正しい値に設定される新しいスコープを作成することです。
(function($, window, undefined) {
// here the following always applies:
// $ === jQuery
// window === the global object [assuming the function was executed in the global scope]
// undefined is well, undefined - in some js engines someone could have redefined it
})(jQuery, this);