У меня возникла ситуация, когда я пытаюсь объединить несколько файлов 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
Я также думаю о линиях мини-инструмента или макропроцессора. Сколько «xyz' вам нужно иметь дело? И, действительно ли лучшая идея поместить все это в один файл, если только часть его будет выполнена на любой заданной странице? –
Ну, идея в том, что в зависимости от страницы и контекста у нас слишком много загрузки файлов. Где-то около 100 различных ресурсов (включая css/images). Поэтому, пытаясь сократить это число, мы пытаемся объединить некоторые файлы, которые часто используются. В этом случае некоторые из них являются библиотеками, а некоторые - нашим внутренним кодом. До этого момента мы не беспокоились о размещении функции xyz() {} в глобальном масштабе. С новым объединенным файлом if (false) {function xyz() {}} попадает в глобальную область видимости, поэтому мы вычислили ее в var foo = function() {function xyz() {}}; if (false) {foo(); } –