我有一种情况,我试图将多个Javascript文件合并为一个,并有条件地应用它们。我不想修改实际的文件。有没有办法可以包装这些文件并按需求调用它们?嵌套函数可以放在Javascript的全局范围内吗?
问题是,其中一些文件的函数中有xyz(){}。所以,用if(false){function xyz(){}}包装它们会使不好的事情发生。
例如,如果这是我的代码...
if (includeFile) {
/* The file */
function foo() {}
/* The file */
}
的问题变得那么Chrome将看到FOO(),并将其放置在全球范围内even if includeFile is false。
简单的解决方案是将其修改为var foo = function(){}但我无法修改这些文件。
我也有一个关于在这些函数上运行eval()的普遍担心,因为它们相当大。 (认为jQuery包装在一个函数中,如果这不是问题,那么也许eval就是答案?)
我希望我可以嵌套函数并通过窗口作为范围,但tried it on jsFiddle and it didn't seem to work。
(function() {
function foo() {
alert('it works');
}
}).apply(window, []);
foo();
有几个similarquestions。但是,没有一个提到我有同样的情况。谢谢。
所以问题是有多个文件之间的名称冲突 - 多个函数xyzs?修改它们真的很糟糕 - 你担心引入错误还是保持与上游兼容?你能否机械地进行重命名,例如sed或用某种缩小工具? – Rup 2012-01-10 01:06:53
我正在思考一个缩小工具或宏预处理器的线条。你需要处理多少个xyz?而且,如果只有部分内容将在任何给定页面上执行,将所有这些内容放在一个文件中是否最好? – 2012-01-10 01:28:49
那么,这个想法是,根据页面和上下文,我们有太多的文件加载。大约100个各种资源(包括css /图像)。所以,为了减少这个数字,我们试图将经常使用的一些文件组合起来。在这种情况下,一些是图书馆,一些是我们的内部代码。 直到这一点我们没有担心将功能XYZ(){}在全球范围内。使用新的组合文件,如果(false){function xyz(){}}在全局范围中结束,所以我们想到将它包装在var foo = function(){function xyz(){}}中; if(false){foo(); } – 2012-01-10 15:30:00