在javascript中为变量分配自执行匿名函数有什么好处?

McS*_*man 2 javascript anonymous-function

我正在阅读有关如何在窗口调整大小完成后触发函数帖子,并且遇到了一些将自动执行匿名函数分配给变量的示例:

var delay = (function(){
    var timer = 0;
    return function(callback, ms){
        clearTimeout (timer);
        timer = setTimeout(callback, ms);
    };
})();

$(window).resize(function() {
    delay(function(){
      alert('Resize...');
      //...
    }, 500);
});
Run Code Online (Sandbox Code Playgroud)

与传统用法相比,使函数操作数自行执行有什么区别/好处?即

var delay = function() { ... 
Run Code Online (Sandbox Code Playgroud)

dec*_*eze 5

主要原因是命名空间变量.函数引入了一个新的变量范围.在上面的示例中,timer不会破坏全局命名空间,同时仍然可用于需要它的代码.


因为我显然需要澄清:

目标是在函数外部有一个变量:

var timer;

function delay() {
   // use timer
}
Run Code Online (Sandbox Code Playgroud)

因为如果变量位于函数内部,则每次都会重新初始化.我们想在函数外部使用持久值.

在上面的代码中timer是一个全局变量.我们不希望这样.为了避免这种情况,我们在新范围内关闭变量,以便delay函数可以访问它,但不能全局访问:

var delay = (function () {
    var timer;

    return function () {
        // use timer
    };
})();
Run Code Online (Sandbox Code Playgroud)

delay现在是一个像以前一样可以timer在外部使用的功能,但timer不在全球范围内.