为什么要惰性函数呢?减少if分支,加快代码执行。惰性载入表示函数执行的分支仅会发生一次。有两种实现惰性载入的方式,一是在函数被调用时再处理函数。另一种是声明函数时就指定适当的函数。
第一种:
function createXHR(){ if(typeof XMLHttpRequest != "undefined"){ createXHR = function(){ return new XMLHttpRequest(); }; }else if(typeof ActiveXObject != "undefined"){ createXHR = function(){ if(typeof arguments.callee.activeXString != "string"){ var versions = ["MSXML2.XMLHttp.6.0", "MSXML2.XMLHttp.3.0", "MSXML2.XMLHttp"], i, len; for(i=0,len=versions.length; i<len; i++){ try{ new ActiveXObject(versions[i]); arguments.callee.activeXString = versions[i]; break; }catch(ex){ //skip } } } return new ActiveXObject(arguments.callee.activeXString); }; }else{ createXHR = function(){ throw new Error("No XHR object available"); }; } return createXHR(); }
第二种:
var createXHR = (function(){ if(typeof XMLHttpRequest != "undefined"){ return function(){ return new XMLHttpRequest(); } }else if(typeof ActiveXObject != "undefined"){ return function(){ `````` } }else{ return function(){ throw new Error("NO XHR object available."); } } })();