Найти переменные в области видимости? - PullRequest
3 голосов
/ 01 ноября 2011

Есть ли способ найти все переменные в области видимости? например,

var localScope = function() {
    var var1 = "something";
    var var2 = "else...";

   console.log(LOCAL_SCOPE);
};

где LOCAL_SCOPE, поэтому возвращает объект вроде:

{
    var1: "something",
    var2: "else..."
}

Я знаю, что это можно сделать, создав локальный объект. но я ищу способ найти все переменные, не имея представления о их существовании.

1 Ответ

1 голос
/ 01 ноября 2011

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

Если вы не знаете ссылку на текущую функцию (например, имя), вы должны использовать устаревшую (и запрещенную в ECMAScript 5) argument.callee.

Получив ссылку на функцию, вы должны получить строку источника либо нестандартным методом toSource(), либо .toString().

После того, как строка получена, вы должны получить все имена переменных, например, используя RegExp. Комбинируя этот метод с циклическим просмотром window, вы можете получить все локальные переменные функций, которые определены в глобальных областях. Затем eval (!!!) необходимо использовать для получения ссылки на локальные переменные. <ч /> Короче говоря, вы не должны пытаться искать метод, который находит все локальные переменные, потому что нет надежного способа достичь этого.

...