如何从浏览器控制台访问存储在函数闭包中的javascript变量?

时间:2012-04-22 20:56:11

标签: javascript closures

让我们说我有一个全球功能:

function Init()
{
       var v = 10;
       window.GlobalFunction = function()
       {
          // Global Function has access to v, because of closure
          alert(v);
       }
}

Init();

如何从FireBug控制台获取v的价值?我可以把突破点放在那里看看价值。但这对我来说还不够。我想为第三方网站构建FireFox插件,因此我需要访问此变量,但无法更改源代码。

2 个答案:

答案 0 :(得分:2)

如果v是一个全局变量,那么你应该只能在控制台输入v来获取它的值。

如果v不是全局的,那么您只能从包含它的函数中访问它。 JavaScript是一种函数范围语言,var关键字表示该变量只能在当前范围内访问。如果您不想使用断点/调试器,如果您无法修改源,并且源没有变量的getter方法,那么您可能会运气不好。

尝试在此处获得创意,您可以根据Init的原型或包含它的任何对象(例如,使用new关键字)创建对象并添加getter函数到您的对象版本。然后在以前使用原始代码对象的任何地方使用新对象。

答案 1 :(得分:0)

如果你的意思是如何从捕获它的函数外部访问闭包捕获的变量,你就不能。控制台不会为您提供对状态的任何特殊访问权限,它会执行JavaScript,就像您在当前断点处执行eval()一样(如果您不在断点处,则执行全局)。如果您无法从JavaScript访问该变量,则无法从控制台访问该变量。

如您所述,您只能在范围内访问v,即您在v范围内停留的时间点停止。