由于 WordPress 在非冲突模式下加载 jQuery,我必须将脚本包装在 jQuery(function($){...})
父脚本按预期执行。 但是,我通过 getScript 有条件地加载第二个脚本:
$.getScript('js/2nd.js').done(function() {
editElem();
});
我还需要将所有内容包装在“2nd.js”中吗?如果我不这样做,什么也不会发生——甚至 Chrome 控制台中也不会抛出错误。如果我将其包装起来,它会显示“editElem 未定义” - 尽管我的“2nd.js”当然定义了它。
感谢您的见解。
最佳答案
最好还是将其包装起来 - 无冲突模式的目标是让您的代码保持工作,即使 $
变量被另一个库占用。不过,正如您所发现的,一旦全局函数位于闭包内,它们就不再是全局的了!
全局变量并不被认为是 JavaScript 最好的成就,这个例子就是一个很好的例子;像 RequireJS 这样的模块加载器(可能是 extended for lazy loading ?)可以让以后的生活变得更轻松。
也就是说,如果您只有两个文件并且只想从 2nd.js
导出函数,则无需任何额外的库即可做到这一点:
(function ($) {
// ... define your functions
function editElem () {
}
function otherFunc () {
}
function privateFunc () {
}
// export any functions needed by scripts outside this file.
window.LazyUtils = {
editElem: editElem,
otherFunc: otherFunc
};
}( jQuery ));
之后,您应该能够从第一个 JS 文件、控制台或任何地方调用 LazyUtils.editElem()
。由您决定如何命名该模块 - “LazyUtils”只是一个示例。
关于jquery - 无冲突模式下的 getScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29194551/