Я не знаю ничего встроенного в JavaScript для обращения к локальным переменным подобным образом (хотя, вероятно, должно быть, учитывая, что все переменные внутренне ссылаются на строки).
Я бы предложил хранить все ваши переменные в объекте, если вам действительно нужен доступ по строке:
var variables = {
"j": 1
};
alert(variables["j"]);
Обновление: Меня немного беспокоит, что нет способа сделать это, как вы хотите. Внутри переменная - это изменяемая привязка в декларативных записях среды. Свойства привязываются к объекту, свойством которого они являются, через записи окружения объекта, но на самом деле есть способ доступа к ним с помощью скобок. К сожалению, нет способа получить доступ к декларативным записям окружения таким же образом.
Нет, потому что переменная доступна только из тех контекстов выполнения, которые содержат область видимости переменной.
Другими словами, единственный способ получить доступ к j
- это если вы обращаетесь к нему из чего-то в рамках test
- через внутреннюю функцию или что-то еще. Это потому, что j
, в некотором смысле, не существует для объектов с более широкой областью действия, таких как глобальный объект. В противном случае имена переменных должны были бы быть уникальными в глобальном масштабе.
Что насчет:
<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>
Нет, в общем случае это невозможно. JavaScript разрешает идентификаторы внутри функции, используя цепочку областей видимости; не существует единого объекта, содержащего все переменные в области видимости, а объекты в цепочке областей видимости недоступны для JavaScript, выполняющегося на странице.
Доступ к переменной с помощью окна или любого другого глобального средства доступа не будет работать, потому что переменная недоступна глобально. Но вы можете использовать eval для вычисления любого выражения:
<script>
function test(){
var j = 1;
alert(eval("j"));
}
test();
</script>