Есть ли способ получить область действия функции вне функции - JS - PullRequest
0 голосов
/ 22 ноября 2018

При использовании консоли chrome devtools на веб-странице в поисках способа доступа к локальным переменным из функции я понял, что вы можете просматривать области при ручной проверке функции в объекте.

Я получил доступфункция с getEventListeners(window).load[2], которая возвратила

▼{listener: ƒ, useCapture: false, passive: false, once: false, type: "load"} ►listener: ƒ () once: false passive: false type: "load" useCapture: false ►__proto__: Object

, когда я щелкнула функцию слушателя, она показала объект ►[[Scopes]]: Scopes[3]

Объект области видимостидал список всех переменных, которые были использованы в функции (что я и искал).Однако я могу получить к ним доступ только вручную.Нет ничего похожего на getEventListeners(window).load[2].listener.Scopes

Существует ли какая-либо функция или метод, который будет автоматически возвращать эти переменные.Такие как:

var foo = getEventListeners(window).load[2].listener.Scopes[0]

Спасибо

Ответы [ 3 ]

0 голосов
/ 22 ноября 2018

Существует ли какая-либо функция или метод, который будет автоматически возвращать эти переменные.

Нет, это невозможно.EnvironmentRecords не доступны в коде "пользовательский".Ассоциация между функцией и средой является внутренней по отношению к функции, и спецификация не определяет какой-либо способ доступа к этой информации.

Но, конечно, связь существует, и поэтому инструменты разработчика могут предоставить эту информацию для отладки.цели.

0 голосов
/ 14 февраля 2019

во-первых, вам придется использовать

var foo = getEventListeners(window).load[2].listener['[[Scopes]]']

, потому что вы забыли дополнительные квадратные скобки, а во-вторых, они на самом деле недоступны для вашего JavaScript, только для devTools.

есть также подделка [[FunctionLocation]], которая также недоступна

0 голосов
/ 22 ноября 2018

Я думаю, что это невозможно, потому что может представлять проблему безопасности для Javascript

И если это не так, возможно, переменные, которые вы ищете, были удалены сборщиком мусора в тот момент, когдаВы пытаетесь получить эти

Подробнее об управлении памятью можно прочитать здесь:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_Management

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...