Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery函数作用域和访问作用域之外的函数_Javascript_Jquery_Function - Fatal编程技术网

Javascript jQuery函数作用域和访问作用域之外的函数

Javascript jQuery函数作用域和访问作用域之外的函数,javascript,jquery,function,Javascript,Jquery,Function,我有一个结构如下的jquery文件: (function($) { var MYTEST= { init: function() { alert('Hello World'); } exec: function() { alert('function executed'); } } $(function() { MYTEST.init(); }) }(jQuery

我有一个结构如下的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解释这种情况的特定术语,很抱歉)

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

(function($, win) {

    win.MYTEST= {

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

}(jQuery, window))
如果您使用的是ES6和export&import,那么您可以使用模块模式(显然ES6在这里不是必须的,但它更好):


尝试从代码中返回函数exec。这称为模块模式

var MyTESTModule = (function($) {

   var MYTEST= {
       init: function() {
          alert('Hello World');
       }      
    }

   $(function() {
      Starling.init();
   })
   return {
    exec: function() {
       alert('function executed');
    }
   }
}(jQuery));
MYTESTModule.exec();

谢谢,行得通。有没有不使用“win”全局变量的选项,只要使用“$”就可以,全局范围始终存在,即使在即时功能范围内也是如此。但是,声明函数中要使用的内容是一种约定。有些还传递“未定义”,这样,如果有人错误地覆盖它,就不会影响他们。
var MyTESTModule = (function($) {

   var MYTEST= {
       init: function() {
          alert('Hello World');
       }      
    }

   $(function() {
      Starling.init();
   })
   return {
    exec: function() {
       alert('function executed');
    }
   }
}(jQuery));
MYTESTModule.exec();