Предположим, у меня есть устаревший файл с именем module.js
, который выглядит примерно так:
a=1;
Это по умолчанию присоединяется к объекту window
, загрязняющему область действия global
(фактически window
) при его запуске в браузере.
Могу ли я вместо этого присоединить его к другому объекту без изменения содержимого исходного кода?
Поскольку единственной реальной проблемой является контекст выполнения и ничто иное, идеальным решением было бы что-то вроде этого:
change execution context from window to module object;
execute the code;
change execution context from module to window object;
Если это невозможно, добавить обертки (например, IIFE) в исходный код можно, если внутреннее содержимое не изменилось. Для изменения внутреннего содержимого требуется полное сканирование кода, что является дорогостоящим.
Я могу, например, обернуть его в такую функцию (✓):
function module()
{
a=1;
}
Если он выполняется в строгом режиме, я могу избежать загрязнения глобальной области видимости. Однако я не могу достать объект.
Я не хочу делать что-то подобное (✗):
module = function module()
{
return a=1;
}
потому что нам нужно добавить return
везде, где есть назначение, а это означает сканирование всего кода.
Я просто пытаюсь найти способы улучшить устаревший код, предназначенный для браузера, с минимальными усилиями.