Javascript 全局导入变量和IIFE

Javascript 全局导入变量和IIFE,javascript,Javascript,在设计类似于jQuery的模块时,web上的许多不同文章都宣称使用全局导入的伟大之处 所以,像这样做 (function(globalVariable){ globalVariable.printStuff = function(){ console.log(‘Hello World’) }; }(globalVariable)); …意味着我可以用如下方式调用函数: globalVariable.printStuff(); 问题是,每当我在控制台中运行此操作时,我总是得到:

在设计类似于jQuery的模块时,web上的许多不同文章都宣称使用全局导入的伟大之处

所以,像这样做

(function(globalVariable){
  globalVariable.printStuff = function(){
    console.log(‘Hello World’)
  };
}(globalVariable));
…意味着我可以用如下方式调用函数:

globalVariable.printStuff();
问题是,每当我在控制台中运行此操作时,我总是得到:

globalVariable undefined
我的问题是,我到底需要在哪里声明此变量才能使其工作?

对于浏览器对象,它是存储所有全局变量的对象。下面的代码显示了具有全局变量的IIFEs的基本实现

//在窗口对象中设置变量“globalVariable” window.globalVariable=10; //访问IIFE中的全局变量“globalVariable” 函数全局变量{ console.logglobalVariable;
}全球可变 对于这样一个真正简单的模块,你不需要任何生活。只需编写一个对象文字:

var globalVariable = {
    printStuff: function() {
        console.log('Hello World');
    }
};

globalVariable.printStuff();
如果你想使用IIFE范围,你仍然需要在某处创建对象。可能在模块内部或外部:

var globalVariable = (function() {
     var module = {};
     var localVariable = 'Hello World';
     module.printStuff = function() {
         console.log(localVariable);
     };
     return module;
}());

globalVariable.printStuff();

globalVariable.printStuff怎么了{/*这是什么意思?*/};?虽然这不是解决方案,但要小心使用卷曲引号“Hello World”,你应该使用常规引号。另外,您是否真的定义了一个名为globalVariable的变量,并将其传递给您的IIFE?我希望此函数中的所有函数都不会污染全局名称空间,并尽量减少与其他脚本的冲突。所以,我希望像globalVariable这样的东西能让我瞄准那些私有函数。。它应该是全局可变的。printsuff=function就是这样!我试图将globalVariable声明为var globalVariable;。为什么需要将其定义为对象?因为您希望在其上创建属性…当然:现在就有意义了。感谢您的澄清。我为什么要这样做?我的目的是向您解释全局变量如何在JavaScript中使用IIFE工作
var globalVariable = {};

(function(module) {
     var localVariable = 'Hello World';
     module.printStuff = function() {
         console.log(localVariable);
     };
}(globalVariable));

globalVariable.printStuff();