我有一个对象,我需要它来运行页面的内容。我需要用严格模式包装它。我试图让它在全球范围内使用,但它没有解决我的问题。
(function($) {
"use strict";
var MyObj = {
// some code here.
}
return MyObj;
})(jQuery);
console.log(MyObj); // <= undefined
如何从项目的任何位置访问此对象?
答案 0 :(得分:4)
你所拥有的是immediately-invoked function expression (IIFE),它专门用于将事物与外部范围分开。由于您正在返回MyObj
,因此您需要做的就是在全球范围内提供此功能:
var MyObj = (function($) {
"use strict";
var MyObj = {
// some code here.
}
return MyObj;
})(jQuery);
console.log(MyObj);
另一种方法是将MyObj
明确地放在全局空间中。在浏览器中,全局对象称为window
,因此您可以在IIFE中说window.MyObj = { /* some code here */ }
。不过,我会劝阻这种方法,因为外界观察者并不清楚这种情况是否发生(即你必须依赖文件)。更好的方法是返回要公开的对象,调用者可以选择将它们放在全局空间中。
答案 1 :(得分:1)
使用use strict
,您只能将Object明确地放入int全局命名空间中。
例如,您可以在函数中使用window.myObj = MyObj
。
实现目标的另一种可能方法是将全局对象传递给您的函数(它可以是浏览器中的窗口,也可以是nodejs中的全局对象)。
(function($, global) {
"use strict";
var MyObj = {}
global.myObj = MyObj;
})(jQuery, window);
此外,正如Ethan建议的那样,既然你返回MyObj,你可以简单地将调用的结果赋给变量。
var myObj = (function($) {
"use strict";
var MyObj = {}
return x
})(jQuery);
myObj; //now defined in the global scope