为什么要惰性函数呢?减少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.");
        }
    }
})();