JavaScript闭包作用之一——延续局部变量的寿命

JavaScript中闭包的作用不少,这里就不一一例举了,今天要说的是利用闭包延续局部变量的寿命在工作中的使用场景。
工作中img 对象经常用于进行数据上报,如下所示:

var report = function( src ){ 
   var img = new Image(); 
   img.src = src; 
}; 
report( 'http://xxx.com/getUserInfo' );

但是因为一些低版本浏览器的实现存在 bug,在这些浏览器下使用 report 函数进行数据上报会丢失 30%左右的数据,也就是说,report 函数并不是每一次都成功发起了 HTTP 请求。丢失数据的原因是 img 是 report 函数中的局部变量,当 report 函数的调用结束后,img 局部变量随即被销毁,而此时或许还没来得及发出 HTTP 请求,导致请求丢失掉。

而把 img 变量用闭包封闭起来,便能解决请求丢失的问题:

var report = (function(){
	var imgs = [];
	return function(src){
		var img = new Image();
		imgs.push(img);
		img.src = src
	}
})();
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页