像窗口一样使变量可访问

时间:2015-10-01 16:59:41

标签: javascript node.js scope

假设我在var car = 'VW'

中有一个变量index.html

index.html是我的应用程序的绑定,从那里我访问了几个模块:

   <script>
    var car = 'VW';
    var Initializer = require('./js/initializer');
    Initializer.check_requirements();
   </script>

现在在initializer我尝试访问此变量,但不起作用。

var Initializer = {
check_requirements: function(){console.log(car)};
};

module.exports = Initializer;

但是,当我将变量car附加到window时:

window.car = 'VW';

然后我可以通过window.car;

在我的模块中访问它

如何创建我也可以在模块中访问的全局变量car,这样我就不必附加到window了? 感谢

1 个答案:

答案 0 :(得分:2)

在浏览器环境中,&#34;全球&#34;变量实际上是window对象的属性,它充当全局上下文。您在问题中使用的语法,即HTML页面中脚本标记中的var语句,实际上会将var名称作为属性添加到窗口中。但是,由于您在这里使用的是CommonJS require语句,这在大多数浏览器中都不是原生支持的,因此可能是您在问题中未包含的编译步骤这阻止了它按照你期望的方式工作。

然而,简短的回答是,不要这样做如果可以避免的话。全局变量的大多数应用可以通过参数更好地完成,例如Initializer.check_requirements(car);,或存储配置设置或其他方法的单独模块。