如何访问全局范围内包装函数中声明的变量?

时间:2019-12-11 21:51:22

标签: javascript scope

我正在研究一个使用两个JS文件的Drupal库-一个内部用于创建设置对象,另一个内部(供应商库)。

这是使用Drupal的必需包装器创建_settingsObject的本地文件。

(function ($) {
    'use strict';
    Drupal.behaviors.myBehavior = {
      attach: function (context, settings) {
        _settingsObject = {
            ...
        };
      }
    };
})(jQuery);

我唯一遇到的问题是另一个文件无法看到该对象,并且无法在控制台中访问它。如何使该对象在全局范围内可用?

谢谢!

2 个答案:

答案 0 :(得分:0)

您可以将其添加到窗口对象。这样做:

(function ($, window) {
    'use strict';
    window.globalVar = "My Global Var";
     Drupal.behaviors.myBehavior = {
       attach: function (context, settings) {
         _settingsObject = {
              ...
         };
       }
    };
})(jQuery, window);

答案 1 :(得分:-1)

正如您所暗示的,原因是由于范围。我不是100%可以正常工作,因为我对该函数的了解不多,但是看起来它正在做什么(如果我错了,请纠正我)正在向Drupal.behaviors中添加_settingsObject。 myBehavior对象,以便在调用它时会调用Drupal.behaviors....。如果是这种情况,请尝试在函数末尾返回该对象。

(function ($) {
    'use strict';
    Drupal.behaviors.myBehavior = {
      attach: function (context, settings) {
        const _settingsObject = {
            ...
        };
        return _settingsObject;
      }
    };
})(jQuery);

如果不是这种情况,请修改您的问题以包括更多代码,以及在另一个文件中到底要调用什么以及如何调用它。如果要获取名为_settingsObject的对象,则需要返回该对象并使其可从全局范围的命名空间访问。