我正在阅读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() { ...
答案 0 :(得分:5)
主要原因是命名空间变量。函数引入了一个新的变量范围。在上面的示例中,timer
并没有破坏全局命名空间,同时仍然可用于需要它的代码。
因为我显然需要澄清:
目标是在函数外部有一个变量:
var timer;
function delay() {
// use timer
}
因为如果变量位于函数内部,则每次都会重新初始化。我们想在函数外部使用持久值。
在上面的代码中,timer
是一个全局变量。我们不希望那个。为避免这种情况,我们在新范围内关闭变量,以便delay
函数可以访问它,但不能全局访问:
var delay = (function () {
var timer;
return function () {
// use timer
};
})();
delay
现在就像以前一样,可以在其自身之外使用timer
,但timer
不在全局范围内。