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

How to access javascript variable stored in function closure from browser console?

本文关键字:闭包 函数 变量 javascript 存储 浏览器 控制台 访问      更新时间:2023-09-26

假设我有一个全局函数:

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

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

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

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

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

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

如前所述,仅当v在范围内时,即当您在断点处停止并且v在范围内时,才能访问它。