在无冲突模式下获取脚本
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" 只是一个示例。
由于 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" 只是一个示例。