我知道不建议使用全局对象,使用 AMD 背后的整个想法是避免使用全局对象。但是对于一些遗留代码,我必须在全局对象中定义一些东西。目前代码如下所示:
//example2.js
define(function(){
var globalObject = window;
globalObject.x = ...
globalObject.y = ...
});
它可以工作,但是对全局对象进行硬编码window
看起来不是很好,我很想知道是否可以删除它。不使用时define()
,代码如下所示:
//example1.js
x = ...
y = ...
define()
我知道,我知道你讨厌这段代码,但让我们直奔主题:如何在 requirejs的函数内部以结构化的方式访问全局变量?我希望有一个隐藏的最后一个参数传递给define()
这样的函数:
//example3.js
define(function(globalObject){
globalObject.x = ...
globalObject.y = ...
});
或者更简单:this
变量将指向该函数内的全局对象。例如:
//example4.js
define(function(){
this.x = ...
this.y = ...
});
注意:我不确定最后一个。调查this
传递给的函数内部的变量require()
说它等于window
which 可以是我的问题的答案,但我无法找到任何提到传递函数正在运行的上下文的文档。也许它毕竟是在全局变量的上下文中运行的?