javascript – 使用requirejs时访问全局对象

前端之家收集整理的这篇文章主要介绍了javascript – 使用requirejs时访问全局对象前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我知道不推荐使用全局对象,使用AMD背后的整个想法是避免使用全局对象.但是对于一些遗留代码,我必须在全局对象中定义一些东西.目前的代码如下:
//example2.js
define(function(){
  var globalObject = window;
  globalObject.x = ...
  globalObject.y = ...
});

它的工作,但硬编码全球对象窗口看起来不是很好,我很好奇,看看是否可以删除它.当没有使用define()时,代码如下所示:

//example1.js
x = ...
y = ...

我知道,我知道你讨厌这个代码,但是让我们来看一下:在requirejs的define()函数内如何以结构化的方式访问全局变量?我希望有一个类似于隐藏的最后一个参数,传递给define()的函数如下所示:

//example3.js
define(function(globalObject){
  globalObject.x = ...
  globalObject.y = ...
});

或者甚至更简单:该变量将指向该函数内的全局对象.例如:

//example4.js
define(function(){
  this.x = ...
  this.y = ...
});

注意:我不知道最后一个.调查这个变量里面的函数传递给require()表示它等于窗口,这可以解答我的问题,但是我还没有找到任何文档,提到上传函数是运行.也许它在全局变量的上下文中运行?

解决方法

如果你不是在严格的模式,你可以这样做:
(function() {
  var global = this;

  define(function(){
    global.x = ...
    global.y = ...
  });
})();

我们立即调用的外部匿名函数调用,没有特别的这个值,所以(因为这不是严格的模式),所以接收全局对象. (在严格的模式下,它会接收未定义的.)所以我们把它变成一个变量(全局的)在匿名函数中,并使用它从你传递到define(它关闭它)的函数.

猜你在找的JavaScript相关文章