我在添加到 Wordpress 站点的一些自定义文件中使用 jQuery,并使用它来允许我使用“$”快捷方式:
jQuery(function ($) {
$(selector).bla();
// etc
}
但是,如果我想将代码拆分为多个文件,则每个文件中都需要存在此构造,然后不能从另一个文件调用其中的函数。这个怎么做?我可以以某种方式将某些函数声明为全局函数吗?
我在添加到 Wordpress 站点的一些自定义文件中使用 jQuery,并使用它来允许我使用“$”快捷方式:
jQuery(function ($) {
$(selector).bla();
// etc
}
但是,如果我想将代码拆分为多个文件,则每个文件中都需要存在此构造,然后不能从另一个文件调用其中的函数。这个怎么做?我可以以某种方式将某些函数声明为全局函数吗?
你可以使用这样的东西:
var myFunc = function($) {
function toExport() {
alert($);
}
return toExport;
}(jQuery);
只需返回您需要的资源(它可以是单个函数、对象或您实际想要的任何东西。)
您可能希望查看使用requirejs定义模块,然后将模块作为依赖项传递。您还可以使用它将 jQuery 定义为依赖项,以便可以使用您想要的任何变量名称在本地范围内限定它。
require(['jquery','somemodule','someothermodule'], function($,module1,module2) {
$(function() {
var mod1 = new module1();
var mod2 = new module2();
...
});
});
jQueryUI 实际上是用类似的方式编写的:
(function( $, undefined ) {
...
}( jQuery ) );
这样,$
保证是jQuery
函数的同义词,并且关键字undefined
将被定义为具有未定义值的参数。该undefined
部分实际上修复了一些浏览器的一些挑剔问题,因为它们并非都以相同的方式处理 undefined 。
您始终可以在全局范围内声明构造之外的函数。jQuery(function() {...});
您只是无法在 DOM 准备好之前访问它,这意味着如果它们访问 DOM ,您将无法在外部执行这些功能。jQuery(function() {...});
您还可以始终通过为属性分配值来创建全局变量window
:
window.theanswer = 42;
向全局命名空间添加许多值并不是一个好的做法,并且存在其他技术来创建模块化 JavaScript 来解决这个问题。请参阅 tvanfosson 的回答。