Как получить доступ к переменным внутри функции на основе представления строковой переменной

У меня есть следующая функция

function myFunction(){
var foo = "My Foo String";
}

Я хотел бы получить доступ к моей переменной следующим образом

function myFunction(){
var foo = "My Foo String";
console.info(SOMETHINGIDONOTKNOWABOUT["foo"]);
}

Я знаю, что в javascript можно использовать window ["yourvariablename"] для доступа к нему, но мне интересно получить доступ к переменной функции аналогичным образом, поэтому Есть ли способ получить доступ к переменной javascript, используя строку, содержащую имя переменной? не является дубликатом. Eval для меня не правильный ответ.

Мне очень трудно понять, о чем вы здесь спрашиваете. Разве нельзя просто использовать foo?

Carcigenicate 07.06.2018 15:01

нет, не могу, потому что переменная вызывается динамически. Он представляет собой строковое представление внутри объекта.

trixo 07.06.2018 15:04

Вы не можете получить доступ к локальным переменным в одной функции из контекста вне этой функции. Изнутри функции вы можете получить доступ к переменным по имени, но не динамически, аналогично window["someName"].

Pointy 07.06.2018 15:07
eval - это ответ Только для доступа к локальным переменным по имени. Если вы не хотите этого делать (да и не должны), тогда не обращаться к локальным переменным по имени. Какой у вас актуальная проблема?
Bergi 07.06.2018 15:08

@Pointy Ну Это та же функция. Я хочу получить к нему доступ из моей функции. Я просто не знаю, как получить доступ ко всем переменным, которые находятся внутри функции, так же, как работает window ["variablename"]

trixo 07.06.2018 15:10

Нет хорошего способа сделать это. Вы можете использовать [ ] для динамического доступа к свойствам объекта, что и включает в себя window["someName"], но нет объекта, на который можно было бы ссылаться таким образом в случае локальных переменных. (Это возможно с eval(), но, как правило, для этого нет веских причин, и это серьезно сказывается на производительности, если вы заботитесь о подобных вещах.)

Pointy 07.06.2018 15:11
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
6
82
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Если я правильно понял ваш вопрос, вам следует использовать foo без кавычек:

window[foo]

Просто обратите внимание, что размещение значений в глобальной области видимости - плохая практика.

Я не думаю, что это правильный ответ, поскольку моя переменная находится внутри функции, поэтому я не могу получить к ней доступ с помощью window []

trixo 07.06.2018 15:06
Ответ принят как подходящий

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

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

function myFunction() {
    var myData = {
        "foo": "My foo string"
    };
    console.info( myData[ "foo" ] );
}

Следующий фрагмент - это то, чего вы пытаетесь достичь?

Если вы хотите использовать переменную в качестве имени элемента массива, вам не нужно использовать кавычки. то есть array["foo"] должен быть array[foo], если foo является переменной.

var array = [];
array['foo'] = 'bar';

// Code #1
function myFunction(element) {
  console.info(array[element]);
}
myFunction('foo');

// Code #2
function myFunction() {
  element = 'foo';
  console.info(array[element]);
}
myFunction();

Надеюсь, это хоть как-то поможет.

@trixo а где определяется ваш массив? Я предполагал, что это было глобально. Кстати, я добавил еще один код.

Takit Isy 07.06.2018 15:12

Извините, я не заметил вашего комментария. Массив отсутствует. Вы можете использовать window ["variableName"] для доступа к переменным окна со строкой, представляющей имя переменной.

trixo 07.06.2018 15:18

Другие вопросы по теме