我一直在关注这个教程,当在ModuleTwo中将Module引用为参数时,一切正常,直到我注释掉Module为止。
我的理解是双管道|| 如果未定义,则空对象{}将创建一个空对象代替Module,但在控制台中却出现错误。
var Module = (function () {
var privateMethod = function () {
// private
};
var someMethod = function () {
// public
};
var anotherMethod = function () {
// public
};
return {
someMethod: someMethod,
anotherMethod: anotherMethod
};
})();
var ModuleTwo = (function (Module) {
Module.extension = function () {
// another method!
};
return Module;
})(Module || {});
基本上,本教程中有一个错误。rplantiko提出了一种使事情正常运行的方法,但是用window.Module || {}
代替写可能会更容易Module || {}
。
这里的运作方式:
undefined
。但是,引用尚未声明的变量会产生收益ReferenceError
(因此您的理解还差一点)。window
对象上。Module
在本教程中,它是一个全局变量,因为它是在所有函数外部声明的,因此您可以通过进行访问window.Module
,ReferenceError
如果未定义(按上一点),则不会导致该变量。显式地分配给window
您定义的任何全局变量(例如,window.Module = (function () { …
如果要使其成为Module
全局变量,则是个好习惯)可能是一个好习惯,但这是有争议的,不在本讨论的讨论范围之内。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句