Как предотвратить закрытие компилятора от удаления неиспользуемой локальной переменной? - PullRequest
0 голосов
/ 11 октября 2018

Я столкнулся с одним сценарием, как показано ниже,

function a() {
  var $$ = this;
  eval("some script");
}

с использованием компилятора замыкания с простым уровнем, он удалит переменную $$ в упрощенном выводе, но эта переменная может быть использована кодом "некоторый сценарий".msgstr "от разработчиков сценариев, так есть ли возможность позволить компилятору closure сохранять переменную $$ в выводе?Спасибо!

Ответы [ 3 ]

0 голосов
/ 15 октября 2018

Используйте конструктор функции :

var a = new Function('var $$ = this; eval("some script");');

Если вы хотите избежать экранирования содержимого «некоторого сценария», вы можете передать его как параметр:

var a = new Function('script', 'var $$ = this; eval(script);');

Это исключает необходимые локальные объекты из анализа компилятора.

0 голосов
/ 18 октября 2018

Заимствование из Решение: экспортируйте символы, которые вы хотите сохранить Я предлагаю использовать скобочную запись для создания этой переменной.Я предполагаю, что ваш глобальный элемент - window.

function a() { window['$$'] = this; eval("some script"); }

Это может быть не красиво, но это работает ;

С выходом

function a() { window.$$ = this; eval("some script"); }

0 голосов
/ 15 октября 2018

Нет, не совсем.Возможно, вам удастся найти обходной путь, но он не гарантированно будет работать в будущих версиях компилятора.

Возможно, вам придется переработать код, чтобы не использовать eval, подобный этому.

...