试图理解最后一行代码

时间:2015-03-06 13:40:56

标签: javascript

我有这段代码:

(function(){
    var d = {
        sayHello: function(a){
            document.writeln("Hello "+a)
        }
    }
    this.d = d;
})();

我知道这是一个IIFE,但最后一行让我感到困惑。对象d是否超出范围?它像一个可以访问的API一样使用,对吧?

this.d = d表示d现在是范围内的变量,可以使用吗?

还有其他方法可以实现吗?

1 个答案:

答案 0 :(得分:4)

由于直接使用()调用IIFE,因此没有“上下文”,因此this将默认(在非ES5严格模式中)为window

因此该行相当于:

window.d = d;

是的,因此将d暴露在全局命名空间中。

您不应该使用此方法,因为它与ES5 "use strict"不兼容,后者在没有显式上下文的情况下设置this = null。我推荐这样的东西,而不是:

var MYNAMESPACE = MYNAMESPACE || {};
MYNAMESPACE.SUBPACKAGE = (function() {
    ...
    return d;
})();