由于Wordpress在非冲突模式下加载jQuery,我必须将我的脚本包装在jQuery(function($){...})
父脚本按预期执行。 但是,我通过getScript有条件地加载第二个脚本:
$.getScript('js/2nd.js').done(function() {
editElem();
});
我是否还需要将所有内容包装在内部" 2nd.js"?如果我不这样做,没有任何反应 - 甚至在Chromes控制台中都没有出现错误。如果我把它包起来,它会说'#34; editElem没有被定义" - 虽然我的" 2nd.js"当然是定义它。
感谢您的见解。
答案 0 :(得分:0)
最好仍然包装它 - noconflict模式的目标是即使$
变量被另一个库占用,也能保持代码正常工作。但是,正如您所发现的那样,一旦他们进入封闭,您的全球职能就不再是全球性的!
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"只是一个例子。