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)
主要原因是命名空间变量.函数引入了一个新的变量范围.在上面的示例中,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不在全球范围内.
| 归档时间: |
|
| 查看次数: |
2200 次 |
| 最近记录: |