您的函数不返回任何内容,因此它的返回值为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
在每个循环中都创建了一个新范围。
自执行函数的另一个用途是创建一个新作用域,其中确保某些变量可用并设置为正确的值:
(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);