lazy loading简单来说就是让某些函数里的判断只执行一遍。这个在处理浏览器兼容性的时候应该是比较适合的。
比如在创建XMLHttpRequest对象时,IE和其他主流浏览器的实现不同,所以需要做兼容性处理。那么我们就可以使用lazy loading。
function createXHR(){
if (typeof XMLHttpRequest != “undefined”){ //非IE浏览器
createXHR = function(){ //overwrite
return new XMLHttpRequest();
};
} else if (typeof ActiveXObject != “undefined”){ //for IE!!!
createXHR = function(){ //overwrite
if (typeof arguments.callee.activeXString != “string”){
var versions = [“MSXML2.XMLHttp.6.0”, “MSXML2.XMLHttp.3.0”,
“MSXML2.XMLHttp”];
for (var i=0,len=versions.length; i < len; i++){
try {
var xhr = new ActiveXObject(versions[i]);
arguments.callee.activeXString = versions[i];
return xhr;
} catch (ex){
//跳过
}
}
}
return new ActiveXObject(arguments.callee.activeXString);
};
} else {
createXHR = function(){ //overwrite
throw new Error(“No XHR object available.”);
};
}
return createXHR(); //立即调用新函数
}
在进行过第一次的条件语句判断后,createXHR这个函数就被重写了,要注意这里的createXHR是全局变量,所以根据js语法,是会覆盖之前的函数声明。
因此在判断过一次条件后,就无需再进行第二次判断,而是直接创建了。