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

标签 javascript closures

假设我有一个全局函数:

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

Init();

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

最佳答案

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

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

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

关于javascript - 如何从浏览器控制台访问存储在函数闭包中的javascript变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10272043/

相关文章:

php - 如何为所有表单提交事件编写通用 js 函数?

javascript - 为什么 select 标签没有填充我的 ng-options?

javascript - 将 "</script>"放入 JavaScript 中的变量中

javascript - 如何记录一组具有相同名称但不同 id 的单选按钮的值?

java - 将 html 代码作为属性添加到 ModelAndView 中

grails - 重用 Grails 标准闭包的一部分

c# - 如何通过 lambda 表达式传递捕获的变量,就好像它未被捕获一样?

swift - 我如何使用 navigationController?.popViewController(动画 : true) inside of a closure with no warnings and errors?

java - 已编译的 lambda 函数中的额外参数从何而来?

ios - 这些闭包中的保留周期有什么区别?标准闭包与对象初始化闭包