如何在Javascript中获取指向局部变量的指针?

如何在Javascript中获取指向局部变量的指针?,javascript,Javascript,假设我知道一个变量叫做“myVar”,它是在一个自调用函数中声明的 (function (){ var myVar=0; setInterval(function(){ console.log(myVar++); }, 3000); })(); 但我不知道这个函数在哪里调用,也不想对大量的JS进行反向工程。我想找到这个变量的引用,以便在控制台中显示它,比如window.rootObject.subObject.myVar。我试图创建

假设我知道一个变量叫做“myVar”,它是在一个自调用函数中声明的

(function (){
    var myVar=0;
    setInterval(function(){ 
            console.log(myVar++);
        }, 3000);  
})();
但我不知道这个函数在哪里调用,也不想对大量的JS进行反向工程。我想找到这个变量的引用,以便在控制台中显示它,比如window.rootObject.subObject.myVar。我试图创建一个函数,该函数从窗口对象递归查找键,但它会发生堆栈溢出,当然是因为循环引用(对象包含对其包含对象的引用)

有什么简单的方法可以找到这个物体的位置吗



编辑:最初的问题是在全局空间中查找一个只有名称的变量,而不知道它是window对象的后代还是存储在EnvironmentRecord中。我提供的示例代码有误导性,所以我编辑了这个问题并接受了一个答案以使其有用。

局部范围的变量实际上是局部范围的。在该范围之外根本无法访问它们。它们不是可通过
窗口
对象访问的属性


如果要使用变量调试代码,请在变量作用域所在的函数内设置断点(例如,通过添加
调试器
语句)。

局部作用域变量实际上是局部作用域。在该范围之外根本无法访问它们。它们不是可通过
窗口
对象访问的属性


如果要使用变量调试代码,请在变量作用域内的函数中设置断点(例如,通过添加
调试器
语句)。更新示例中的
myVar
不“属于”任何可以获得引用的对象。在规范方面,它属于匿名函数调用的执行上下文的可变环境,但您无法直接访问该对象(该对象可能在运行时存在,也可能根本不存在,具体取决于所使用的JavaScript引擎的实现方式)


您似乎相信所有对象(即使是仅规范的对象,如环境记录)都在一棵树中,并且可以沿着某个根对象的引用路径访问,因此在代码中是“可发现”的。这是可以理解的,但事实并非如此。当然,JavaScript引擎有类似于垃圾收集目的的树(对于实际在运行时创建的对象),但是没有,没有根可以发现代码中可以访问的所有内容。

myVar
在更新的示例中不“属于”任何可以获得引用的对象。在规范方面,它属于匿名函数调用的执行上下文的可变环境,但您无法直接访问该对象(该对象可能在运行时存在,也可能根本不存在,具体取决于所使用的JavaScript引擎的实现方式)


您似乎相信所有对象(即使是仅规范的对象,如环境记录)都在一棵树中,并且可以沿着某个根对象的引用路径访问,因此在代码中是“可发现”的。这是可以理解的,但事实并非如此。当然,JavaScript引擎有类似于垃圾收集目的的树(对于实际在运行时创建的对象),但是没有,没有根可以发现代码中可以访问的所有内容。

上面的代码示例没有意义。有一个局部定义的变量,但您已经说过它“属于一个对象”。那么,它是否成为对象的属性?或者它只是在对象属性引用的方法中使用?或者…?我猜所有对象都有一个父对象。不我更新了这个示例,以显示myVar在很长一段时间内是持久的。“我只是想所有对象都有一个父对象。没有?”“父对象”在JavaScript中不是一个定义良好的术语。如果您的意思是“所有对象都由其他对象的属性引用”,那么不,这不是真的,至少不在JavaScript引擎的内部,它显然会跟踪具有某种结构形式的所有对象。如果你的意思是“所有对象都有一个原型”(我想你没有),那也不是真的。上面的代码示例毫无意义。有一个局部定义的变量,但您已经说过它“属于一个对象”。那么,它是否成为对象的属性?或者它只是在对象属性引用的方法中使用?或者…?我猜所有对象都有一个父对象。不我更新了这个示例,以显示myVar在很长一段时间内是持久的。“我只是想所有对象都有一个父对象。没有?”“父对象”在JavaScript中不是一个定义良好的术语。如果您的意思是“所有对象都由其他对象的属性引用”,那么不,这不是真的,至少不在JavaScript引擎的内部,它显然会跟踪具有某种结构形式的所有对象。如果你的意思是“所有对象都有一个原型”(我想你没有),那也不是真的。谢谢,这是我的问题。我认为可能有一个特殊的对象用于调试,它公开了垃圾收集器的树(图)。我不应该添加这个示例代码,因为一开始我不知道这个变量是完全本地的还是以某种方式连接到全局范围。我提出了一个更具体的问题:谢谢,这是我的问题。我认为可能有一个特殊的对象用于调试,它公开了垃圾收集器的树(图)。我不应该添加这个示例代码,因为一开始我不知道这个变量是完全本地的还是以某种方式连接到全局范围。我提出了一个更具体的问题: