什么' function(){return this}()'做一个论点?

时间:2015-01-29 15:27:38

标签: javascript

取自nanoajax(https://github.com/yanatan16/nanoajax)。为什么不直接传入这个,自我执行函数返回什么呢?

!function(e, t) {
    function n() {
        if (t.XMLHttpRequest) return new t.XMLHttpRequest;
        try {
            return new t.ActiveXObject("MSXML2.XMLHTTP.3.0")
        } catch (e) {}
    }
    t.nanoajax = e, e.ajax = function(e, t, r) {
        r || (r = t, t = null);
        var u = n();
        return u ? (u.onreadystatechange = function() {
            4 == u.readyState && r(u.status, u.responseText)
        }, t ? (u.open("POST", e, !0), u.setRequestHeader("X-Requested-With", "XMLHttpRequest"), u.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")) : u.open("GET", e, !0), void u.send(t)) : r(new Error("no request"))
    }
}({}, function() { return this }());

1 个答案:

答案 0 :(得分:3)

它确保参数确实是全局对象(浏览器中为window或节点/ ioj上为root),如果外部作用域中的this不是&#39,则可能会有所不同;吨

示例:

function A(){
}
A.prototype.doIt = function(){
  !function(a){
    console.log(a);
  }(function() { return this }()); // passing this would pass the instance of A
};
(new A).doIt();

此处,传递this不会传递全局对象。

请注意,此代码是自动缩小操作的产物。