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

时间:2012-12-07 08:47:04

标签: javascript anonymous-function

我正在阅读post about how to fire a function after a window resize was complete并且遇到了一些将自动执行匿名函数分配给变量的示例:

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

$(window).resize(function() {
    delay(function(){
      alert('Resize...');
      //...
    }, 500);
});

使功能操作数自行执行与传统使用相比有什么区别/好处?即。

var delay = function() { ... 

1 个答案:

答案 0 :(得分:5)

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


因为我显然需要澄清:

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

var timer;

function delay() {
   // use timer
}

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

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

var delay = (function () {
    var timer;

    return function () {
        // use timer
    };
})();

delay现在就像以前一样,可以在其自身之外使用timer,但timer不在全局范围内。