#javascript
#javascript
Вопрос:
Я хочу получить доступ к локальной переменной функции, но я не могу изменить функцию;
testFunction()
function testFunction()
{
var localVarible = "Varible which i can't access";
}
console.log(localVarible)
Комментарии:
1. Вы не можете получить к ним доступ, в этом суть ЛОКАЛЬНОЙ переменной. Если вам нужен доступ к нему, верните его из функции.
2. если вы хотите получить доступ к значению
localVariable
, то объявите его глобально вне функции и присвоите ему значение внутри функции.3. Какова цель операции? Зачем вам нужно изменять его внутри функции? Почему бы просто не переопределить функцию?
4. Это совершенно намеренно невозможно, и модель безопасности JavaScript опирается на это. Однако, если вы можете подключить отладчик, вы можете получить к нему доступ (например, в Chrome) через
Debugger.pause
, а затем прослушиватьDebugger.paused
событие, которое поступает сCallFrame
объектами с цепочками областей видимости, которые имеют доступ к замыканиям. Вы также можете переписать исходный код.
Ответ №1:
Как отмечалось в комментариях, это невозможно напрямую, и было бы полезно понять вашу цель здесь. Но предполагая, что вы пытаетесь внедрить что-то поверх существующей страницы, вы можете просто повторно объявить функцию с некоторым добавленным кодом, например:
var myGlobalVarible;
testFunction = function() {
var localVarible = "Varible which i can't access";
...
myGlobalVarible = localVarible;
}
console.log(myGlobalVarible);
Вам действительно нужно включить весь код исходной функции, чтобы заставить это работать; так что это не очень чисто!
Ответ №2:
Эта проблема приведет к интересной теме JavaScript «Закрытие»
Поскольку вы не можете получить доступ к внутренней переменной функции извне. В JavaScript все функции имеют доступ к области «над» ними. JavaScript поддерживает вложенные функции. Вложенные функции имеют доступ к области «над» ними или содержащим функциям.
Закрытие — это способ JavaScript реализовать проблему доступа к частным предполагаемым переменным (например, общедоступные свойства для доступа к частным полям на языке программирования C #):
Следующий код является примером закрытия и должен решить вашу проблему.
var innerFunctionVariable = (function () {
var localVariable = "Varible which i can't access";
return function () {return localVariable;}
})();
console.log ( внутренняя функция переменной ());
Да, вы все еще объявляете глобальную переменную, но теперь другим разработчикам ясно, что предназначенная для этой глобальной переменной задача — получить доступ ТОЛЬКО к «частной» локальной переменной и ничего больше.