Доступ JavaScript к локальным переменным

#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 ( внутренняя функция переменной ());

Да, вы все еще объявляете глобальную переменную, но теперь другим разработчикам ясно, что предназначенная для этой глобальной переменной задача — получить доступ ТОЛЬКО к «частной» локальной переменной и ничего больше.