2

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

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

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

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

var delay = function() { ... 
4

1 回答 1

6

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


因为我显然需要澄清:

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

var timer;

function delay() {
   // use timer
}

因为如果变量在函数内部,每次都会重新初始化。不过,我们希望在函数之外有一个持久值。

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

var delay = (function () {
    var timer;

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

delay现在和以前一样是一个可以timer在自身外部使用的函数,但timer不在全局范围内。

于 2012-12-07T08:49:26.657 回答