ответом на этот вопрос, вероятно, будет «это невозможно сделать без написания собственного анализатора javaScript», но здесь я пойду: при разработке какого-то легкого скриптового инструмента я столкнулся с необходимостью сделать некоторую автоматическую очистку за кулисами, когда некоторыеПеременные блока выходят из области видимости.
(у этого инструмента нет серьезного разбора, выполняемого под капотом ..., я просто беру обычный текстовый исходный код javascript, немного увеличиваю его, добавляю некоторые зависимости от контекста и создаюработать из него и выполнить его)
я бы хотел, чтобы это было сделано автоматически без конечного пользователя, который написал сценарий, даже понимая, что это происходит за кулисами.
например, я получилэтот блок
{
const activatingElement=await $getElement('//input[@class="button" and @type="submit"]');
await $wait(defaultWaitTime);
let transaction = $startTransaction({customTransactionName:"LoginAndLoad_page"});
await activatingElement.click();
await $waitFor({query:'(//tbody[@class="ui-datatable-data ui-widget-content"]//tr[@role="row"])[1]'});
$endTransaction(transaction);
console.log(this);
await activatingElement.dispose();
}
я бы хотел, чтобы последняя строка await activatingElement.dispose();
автоматически выполнялась непосредственно перед тем, как const activatingElement
, определенный в блоке, выходит из области видимости.я управляю методом, который определяет значение для этой переменной ($ getElement), поэтому я могу изменить его, как я хочу.но я не хочу просто редактировать исходный код и писать утилиту до конца блока, так как он будет хрупким в случае вложенных блоков.поэтому я бы хотел, чтобы этот метод вызывался автоматически перед тем, как эта переменная выходит из области видимости.Есть ли какой-нибудь трюк, который я могу использовать, чтобы сделать это?
это необходимо, чтобы очистить некоторые элементы браузера для GC, они не являются элементами внутри моего собственного выполнения кода nodejs, они являются дескрипторами для кода, который выполняется в браузереи если я не вызову dispose () для них, тогда необходимые ресурсы могут быть недоступны для очистки.
есть ли способ сделать это?я думал об использовании ловушек с прокси, но не думаю, что это может быть сделано вне области видимости переменных (только при удалении свойства)