Javascript jQuery函数作用域和访问作用域之外的函数
我有一个结构如下的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
(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();