在无冲突模式下获取脚本

getScript in noconflict-mode

由于 Wordpress 在非冲突模式下加载 jQuery,我必须将我的脚本包装在 jQuery(function($){...})

父脚本按预期执行。 但是,我有条件地通过 getScript:

加载第二个脚本
$.getScript('js/2nd.js').done(function() {
   editElem();
});

我是否还需要将所有内容都包裹在“2nd.js”中?如果我不这样做,什么也不会发生——甚至在 Chrome 控制台中也不会抛出错误。如果我包装它,它会显示 "editElem is not defined" - 尽管我的“2nd.js”当然定义了它。

感谢您的见解。

最好仍然包装它 — 无冲突模式的目标是即使 $ 变量被另一个库占用,您的代码也能正常工作。但是,正如您所发现的那样,您的全局函数一旦在闭包中就不再是全局的!

Globals 不被认为是 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" 只是一个示例。