0

Lets say I have a global function:

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

Init();

How I can get value of v from FireBug console? I can put break point there and see value. However this is not enough for me. I want to build FireFox addon for third party website, so I need access this variable, but can't change source code.

4

2 回答 2

2

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

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

尝试在这里发挥创意,您​​可能能够基于原型Init或包含它的任何对象(例如,使用new关键字)创建一个对象,并为您的对象版本添加一个 getter 函数。然后在您之前使用原始代码对象的任何地方使用您的新对象。

于 2012-04-22T20:59:16.233 回答
0

如果您的意思是如何从捕获它的函数外部访问通过闭包捕获的变量,那么您不能。控制台没有给你任何对状态的特殊访问,它执行 JavaScript,就好像你eval()在当前断点处执行一样(或者如果你不在断点处,则全局执行)。如果您无法从 JavaScript 访问该变量,您也无法从控制台访问它。

正如您所指出的,您只能v在它在范围内时访问,即当您在一个断点处停止并且v在范围内时。

于 2012-04-23T06:08:29.227 回答