2013-07-21 2 views
-1

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

var foo = function() 
{ 
    var bar = true; 
    var inner = function() 
    { 
    alert(bar); 
    }(); 
} 

, когда я запускаю это, все в порядке, предупреждение говорит «истина». Но что, если имя переменной является динамическим, и мне нужно получить значение bar из строки? Как я могу получить доступ к родительской области для получения переменной?

пример: если область видимости - это окно, и у нас есть строка, содержащая имя динамической переменной, я бы использовал окно [someString] для получения этой переменной.

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

+0

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

+0

Эта ссылка должна помочь вам. http://stackoverflow.com/questions/17438006/how-to-preserve-parent-functions-variable-value-before-creating-local-variable – JNL

ответ

-1

Нет родительского объекта, поскольку переменные не являются свойствами какого-либо объекта.

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

var foo = function() 
{ 
    var bar = true; 
    var inner = function() 
    { 
    var name = "bar"; 
    alert(eval(name)); 
    }(); 
} 

Слово предостережения:

  • eval функция медленно, так как он должен разобрать строку в код каждый раз.
  • eval функция опасно как он выполнит что-нибудь, что содержит строка. Если строка может содержать все, что может контролировать другой пользователь, она может открыть ваш сайт для межсайтового скриптинга.
+0

Почему downvote? Если вы не объясните, что вы считаете неправильным, оно не может улучшить ответ. – Guffa

Смежные вопросы