让我们说我有一个全球功能:
function Init()
{
var v = 10;
window.GlobalFunction = function()
{
// Global Function has access to v, because of closure
alert(v);
}
}
Init();
如何从FireBug控制台获取v的价值?我可以把突破点放在那里看看价值。但这对我来说还不够。我想为第三方网站构建FireFox插件,因此我需要访问此变量,但无法更改源代码。
答案 0 :(得分:2)
如果v
是一个全局变量,那么你应该只能在控制台输入v
来获取它的值。
如果v
不是全局的,那么您只能从包含它的函数中访问它。 JavaScript是一种函数范围语言,var
关键字表示该变量只能在当前范围内访问。如果您不想使用断点/调试器,如果您无法修改源,并且源没有变量的getter方法,那么您可能会运气不好。
尝试在此处获得创意,您可以根据Init
的原型或包含它的任何对象(例如,使用new
关键字)创建对象并添加getter函数到您的对象版本。然后在以前使用原始代码对象的任何地方使用新对象。
答案 1 :(得分:0)
如果你的意思是如何从捕获它的函数外部访问闭包捕获的变量,你就不能。控制台不会为您提供对状态的任何特殊访问权限,它会执行JavaScript,就像您在当前断点处执行eval()
一样(如果您不在断点处,则执行全局)。如果您无法从JavaScript访问该变量,则无法从控制台访问该变量。
如您所述,您只能在范围内访问v
,即您在v
范围内停留的时间点停止。