Javascript模块模式未捕获参考错误

凯尔

我一直在关注这个教程,当在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 || {});
安东·斯特罗诺诺夫(Anton Strogonoff)

基本上,本教程中有一个错误。rplantiko提出了一种使事情正常运行的方法,但是用window.Module || {}代替写可能会更容易Module || {}

这里的运作方式:

  • 访问任何对象的不存在的属性将产生undefined但是,引用尚未声明的变量会产生收益ReferenceError(因此您的理解还差一点)。
  • 浏览器将所有全局变量作为属性放到全局window对象上。Module在本教程中,它是一个全局变量,因为它是在所有函数外部声明的,因此您可以通过进行访问window.ModuleReferenceError如果未定义(按上一点),则不会导致该变量

显式地分配给window您定义的任何全局变量(例如,window.Module = (function () { …如果要使其成为Module全局变量,是个好习惯)可能是一个好习惯,但这是有争议的,不在本讨论的讨论范围之内。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章