在$(document).ready(function(){..})中创建“namespace”;

// first.js $(document).ready(function() { var MyNamespace = {}; }); // second.js $(document).ready(function() { console.log(MyNamespace); }); 

运行此脚本我收到错误Uncaught ReferenceError: MyNamespace is not defined 。 我想,我收到此错误是因为MyNamespaceMyNamespace调用的定义在不同的范围内。 我该如何解决这个问题?

我需要在$(document).ready()包装器中创建命名空间,因为此命名空间中的函数将使用jQuery方法等。

什么是最佳做法?

谢谢!

您需要更改两件事:

  1. MyNamespace放在全局范围内;
  2. 避免在每个文件中重新定义 MyNamespace ;

你把var MyNamespace = MyNamespace || {}; var MyNamespace = MyNamespace || {}; 在你的两个js文件前面。 如果之前没有定义,它会将MyNamespace作为对象进行MyNamespace

 // first.js var MyNamespace = MyNamespace || {}; $(document).ready(function() { console.log(MyNamespace); }); // second.js var MyNamespace = MyNamespace || {}; $(document).ready(function() { console.log(MyNamespace); }); 

如果您在文档就绪处理程序之外定义变量,它应该工作 –

 var MyNamespace = {}; $(document).ready(function() { console.log(MyNamespace); }); 

在作用域外创建名称空间,然后在作用域内向其添加方法:

 var MyNamespace = {}; $(document).ready(function() { MyNamespace.MyFunction = function () { ... }; }); $(document).ready(function() { console.log(MyNamespace); }); 

在外面创建并在里面更新它:

 var MyNamespace = {}; $(document).ready(function() { MyNamespace.Example = new function() { // do something }; }); $(document).ready(function() { console.log(MyNamespace); }); 

使用var定义函数的局部变量,该变量在此范围之外是不可见的。 省略var将定义一个全局变量,也可以在另一个函数中访问。 一般来说,您应该避免使用全局变量,但如果这是您需要的,只需说出MyNamespace = {};

使用’window’对象。

 $(document).ready(function () { window['x'] = 'test'; }); $(document).ready(function () { alert(x); });