JavaScript访问局部变量

JavaScript访问局部变量,javascript,Javascript,我想访问函数的局部变量,但我不能更改函数 testFunction() function testFunction() { var localVarible = "Varible which i can't access"; } console.log(localVarible) 正如评论中所指出的,这不是直接可能的,在这里了解您的目标将是有益的。但是,假设您打算在现有页面上注入一些内容,您只需重新声明该函数,并添加一些代码,例如: var myGlobalVa

我想访问函数的局部变量,但我不能更改函数

testFunction()
function testFunction()
{
    var localVarible = "Varible which i can't access";
}


console.log(localVarible)

正如评论中所指出的,这不是直接可能的,在这里了解您的目标将是有益的。但是,假设您打算在现有页面上注入一些内容,您只需重新声明该函数,并添加一些代码,例如:

var myGlobalVarible;
testFunction = function() {
    var localVarible = "Varible which i can't access";
    ...
    myGlobalVarible = localVarible;
}
console.log(myGlobalVarible);

您确实需要包含原始函数的所有代码才能使其正常工作;所以它不是很干净

这个问题将引出一个有趣的JavaScript主题“闭包”

由于无法从外部访问内部变量函数。在JavaScript中,所有函数都可以访问它们“之上”的作用域。 JavaScript支持嵌套函数。嵌套函数可以访问其“上方”的作用域或包含函数的作用域

闭包是JavaScript实现访问私有预期变量问题的一种方式(如在C#编程语言中访问私有字段的公共属性):

下面的代码是一个闭包示例,应该可以解决您的问题

var innerFunctionVariable = (function () {
    var localVariable = "Varible which i can't access";
    return function () {return localVariable;}
})();
console.log(innerFunctionVariable())


是的,您仍然在声明一个全局变量,但现在其他开发人员清楚了,这个全局变量的预期任务只是访问“私有”局部变量,而不是其他任何东西。

您不能访问它们,这就是局部变量的意义所在。如果需要访问它,请从函数返回它。如果要访问
localVariable
的值,请在函数外部全局声明它,并在函数内部为它赋值。目标操作是什么?为什么需要在函数内部更改它?为什么不重新声明函数呢?这是故意不可能的,JavaScript的安全模型依赖于此。但是,如果可以连接调试器,则可以通过
debugger.pause
访问它(例如在chrome中),然后侦听
debugger.paused
事件,该事件随具有访问闭包的作用域链的
CallFrame
对象一起到达。您还可以重写源代码。