我有以下代码。这是一个JavaScript模块。
(function() {
// Object
var Cahootsy;
Cahootsy = {
hello: function () {
alert('test');
},
};
(Cahootsy.scope = (function() {
return this;
})()).Cahootsy = Cahootsy;
return Cahootsy;
}).call(this);
我不了解以下内容:
(Cahootsy.scope = (function() {
return this;
})()).Cahootsy = Cahootsy;
我认为它正在创建一个引用“此”模块的对象,然后将Cahootsy变量分配给全局Cahootsy变量。我不明白的是为什么需要将“this”分配给Cahootsy.scope
最佳答案
您可以将其分解,如下所示:
var getScope = function() {return this;}
Cahootsy.scope = getScope();
getScope().Cahootsy = Cahootsy;
它所做的是获取全局范围(通常是
window
,但并非总是如此)。然后,它通过对象的Cahootsy
属性创建从scope
到全局范围的链接,并通过范围的Cahoosty
属性创建另一种链接。结果是,在浏览器中,您将获得
window.Cahootsy
为对象,并且window.Cahootsy.scope
返回窗口。关于Javascript模块,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13665722/