javascript闭包范围链 - 如何查看绑定到范围链的变量?

时间:2011-11-14 21:37:18

标签: javascript

Javascript函数是对象,它们具有与之关联的作用域链。 如果某个闭包存在一个函数,该函数具有与定义它们时生效的函数不同的作用域。作为示例,调用函数是来自其他(父)函数的返回函数对象,该函数具有大的作用域链私有变量的数量, 所以调用函数将使用已存在的父函数的继承范围链以及有界旧变量。

有没有办法检查与范围链相关的变量而不查看父函数?

理想情况下,必须跟踪父函数中定义的变量,我的问题是没有查找父函数,我们能看到与范围链相关的变量吗?

如果是(任何方法?)我们可以检查与范围链相关的变量的当前值吗?

也可以有人给出范围链的结构(至少我知道它不像CPU堆栈那样结构但是其他东西?)。

1 个答案:

答案 0 :(得分:1)

在同一个上下文中创建的函数可以使用范围变量(JavaScript是功能范围的)。

您可以访问它们,但无法运行报告它们的方法。如果这是一个常见的要求,我建议将内部变量保存在“config”变量中:

var obj = (function (config) {
return {
  getTest: function () {
    return config.test;
  }
};
}({test: 1}));

Nick Zackas对范围链做了很好的演示(我认为它在这里:http://googlecode.blogspot.com/2009/06/nicholas-c-zakas-speed-up-your.html

否则,请使用浏览器和Chrome等开发人员工具(Firebug经常会忘记范围内的变量)。