JavaScript: Получите доступ к локальной переменной или переменной в закрытии ее именем [дубликат]

14
задан Community 23 May 2017 в 10:29
поделиться

5 ответов

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

Я бы предложил хранить все ваши переменные в объекте, если вам действительно нужен доступ по строке:

var variables = {
    "j": 1
};
alert(variables["j"]);

Обновление: Меня немного беспокоит, что нет способа сделать это, как вы хотите. Внутри переменная - это изменяемая привязка в декларативных записях среды. Свойства привязываются к объекту, свойством которого они являются, через записи окружения объекта, но на самом деле есть способ доступа к ним с помощью скобок. К сожалению, нет способа получить доступ к декларативным записям окружения таким же образом.

13
ответ дан 1 December 2019 в 10:18
поделиться

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

Другими словами, единственный способ получить доступ к j - это если вы обращаетесь к нему из чего-то в рамках test - через внутреннюю функцию или что-то еще. Это потому, что j , в некотором смысле, не существует для объектов с более широкой областью действия, таких как глобальный объект. В противном случае имена переменных должны были бы быть уникальными в глобальном масштабе.

2
ответ дан 1 December 2019 в 10:18
поделиться

Что насчет:

<script>
    function Func(){
        var fn = arguments.callee;
        fn.j = 99;
        console.log(fn['j']);
    }
    Func();
    console.log(window['j']); //not global
    console.log(Func['j']); //but not private
</script>
2
ответ дан 1 December 2019 в 10:18
поделиться

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

2
ответ дан 1 December 2019 в 10:18
поделиться

Доступ к переменной с помощью окна или любого другого глобального средства доступа не будет работать, потому что переменная недоступна глобально. Но вы можете использовать eval для вычисления любого выражения:

<script>
function test(){
   var j = 1; 
   alert(eval("j"));
}

test();
</script>
7
ответ дан 1 December 2019 в 10:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: