如何在Javascript中获得指向局部变量的指针
How to get pointer to a local variable in Javascript?
假设我知道一个变量名为myVar,它是在一个自调用函数中声明的
(function (){
var myVar=0;
setInterval(function(){
console.log(myVar++);
}, 3000);
})();
但是我不知道这个函数在哪里被调用,也不想逆向工程大量的JS。我想找到这个变量的引用,这样我就可以在控制台显示它,比如window。rooobject。subobject。myvar。我试图做一个函数,从窗口对象递归地寻找键,但它做一个stackoverflow,当然是因为循环引用(一个对象包含对其包含对象的引用)。
有什么简单的方法可以找到这个东西在哪里吗?
编辑:原来的问题是关于在全局空间中找到一个变量,只有它的名字,而不知道它是窗口对象的后代还是存储在环境记录中。我提供的示例代码具有误导性,因此我编辑了问题并接受了一个答案,以使其有用。
myVar
在您更新的示例中不"属于"您可以获得引用的任何对象。在规范术语中,它属于EnvironmentRecord,用于匿名函数调用的执行上下文的变量环境,但是您无法直接访问该对象(在运行时可能存在,也可能不存在,这取决于使用的JavaScript引擎是如何实现的)。
你似乎相信所有对象(甚至像环境记录这样仅规范的对象)都在树中,并且可以从某个根对象的引用路径访问,因此在代码中以某种方式"可发现"。这可以理解,但事实并非如此。当然,JavaScript引擎有这样的树,用于垃圾收集目的(对于实际在运行时创建的对象),但没有,没有根,可以发现所有可以在代码中访问的内容。
局部作用域变量确实是局部作用域。它们在该范围之外根本无法访问。它们不是可以通过window
对象访问的属性。
如果你想使用变量调试代码,在变量作用域的函数内设置一个断点(例如通过添加debugger
语句)
- Javascript用函数return替换局部变量
- 每次调用函数时,都要修改Javascript中的局部变量
- 局部变量在闭包中丢失
- 试图将一个局部变量传递给我的ngAside控制器
- jQuery.ajax()访问javascript循环中的beforeEnd局部变量
- 如何使用局部变量创建全局变量
- 如何在单击链接后将局部变量发送到部分呈现
- 定义 JavaScript 类的局部变量
- 创建所有原型函数均可访问的局部变量
- 局部变量的声明
- JavaScript:在调用之前将函数重新分配给局部变量,而不是直接调用并对'这'
- 为什么 Javascript 中的类变量在尝试多次调用它们或将它们分配给局部变量时会消失
- 函数中的局部变量
- 局部变量仍可通过函数访问
- JavaScript和局部变量是不好的做法
- 局部变量在应用 function.call() 后变为全局变量
- 如何创建一个只应用了一些过滤器的局部变量
- 我可以't克服这个错误“;未定义的局部变量或方法`f'"任何原因
- 将函数复制到局部变量并保留此指针
- 如何在Javascript中获得指向局部变量的指针