Javascript函数是对象,它们具有与之关联的作用域链。 如果某个闭包存在一个函数,该函数具有与定义它们时生效的函数不同的作用域。作为示例,调用函数是来自其他(父)函数的返回函数对象,该函数具有大的作用域链私有变量的数量, 所以调用函数将使用已存在的父函数的继承范围链以及有界旧变量。
有没有办法检查与范围链相关的变量而不查看父函数?
理想情况下,必须跟踪父函数中定义的变量,我的问题是没有查找父函数,我们能看到与范围链相关的变量吗?
如果是(任何方法?)我们可以检查与范围链相关的变量的当前值吗?
也可以有人给出范围链的结构(至少我知道它不像CPU堆栈那样结构但是其他东西?)。
答案 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经常会忘记范围内的变量)。