【问题标题】:jQuery function scope and accessing the function outside the scopejQuery函数作用域和访问作用域外的函数
【发布时间】:2017-05-26 00:45:15
【问题描述】:

我有一个具有以下结构的 jquery 文件::

(function($) {

var MYTEST= {

       init: function() {
          alert('Hello World');
       }
       exec: function() {
            alert('function executed');
       }
    }

  $(function() {
     MYTEST.init();
  })

}(jQuery))

我想在另一个文件或 jQuery 范围之外访问第二个函数,即 'exec'。说清楚这样的事情::

 (function($) {

        var MYTEST= {
        .
        .
        }

 }(jQuery))

    $(function() {
         MYTEST.exec();
    })

我知道上面的代码行不通,只是想了解一下。如何在外部访问该功能(我实际上不知道具体的行话来解释 javascript 中的情况,对此感到抱歉)

【问题讨论】:

    标签: javascript jquery function


    【解决方案1】:

    简单的答案是使用带命名空间的全局范围,这将允许您在不同的文件中使用对象。

    (function($, win) {
    
        win.MYTEST= {
    
           init: function() {
              alert('Hello World');
           }
           exec: function() {
                alert('function executed');
           }
        }
    
    }(jQuery, window))
    

    如果你使用 ES6 并导出和导入,你可以使用模块模式(显然 ES6 在这里不是必须的,但它更好):

    const MYTESTModule = (function($) {
    
        return MYTEST= {
    
           init: function() {
              alert('Hello World');
           },
           exec: function() {
                alert('function executed');
           }
        };
    
    }(jQuery));
    
    export default MYTESTModule;
    

    【讨论】:

    • 谢谢,这行得通。有没有不使用'win'全局变量的选项,只使用'$'
    • 可以,全局作用域始终存在,即使在直接函数作用域内也是如此。但在函数中声明要使用的内容是一种约定。有些还传递了“未定义”,因此如果有人错误地覆盖它,它不会影响他们。
    【解决方案2】:

    尝试从您的代码中返回函数 exec。这就是所谓的模块模式。

    var MyTESTModule = (function($) {
    
       var MYTEST= {
           init: function() {
              alert('Hello World');
           }      
        }
    
       $(function() {
          Starling.init();
       })
       return {
        exec: function() {
           alert('function executed');
        }
       }
    }(jQuery));
    MYTESTModule.exec();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-10
      • 2015-08-22
      • 1970-01-01
      • 2012-09-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多