Предположим, у меня есть устаревший файл с именем 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
везде, где есть присваивание, а это означает сканирование всего кода.
Я просто пытаюсь найти способы улучшить устаревший код, предназначенный для браузера, с минимальными усилиями.
script
, поскольку он предназначен для использования в браузере. - person Nishant   schedule 05.05.2018