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

How to get pointer to a local variable in Javascript?

本文关键字:局部变量 指针 Javascript      更新时间:2023-09-26

假设我知道一个变量名为myVar,它是在一个自调用函数中声明的

(function (){
    var myVar=0;
    setInterval(function(){ 
            console.log(myVar++);
        }, 3000);  
})();

但是我不知道这个函数在哪里被调用,也不想逆向工程大量的JS。我想找到这个变量的引用,这样我就可以在控制台显示它,比如window。rooobject。subobject。myvar。我试图做一个函数,从窗口对象递归地寻找键,但它做一个stackoverflow,当然是因为循环引用(一个对象包含对其包含对象的引用)。

有什么简单的方法可以找到这个东西在哪里吗?


编辑:原来的问题是关于在全局空间中找到一个变量,只有它的名字,而不知道它是窗口对象的后代还是存储在环境记录中。我提供的示例代码具有误导性,因此我编辑了问题并接受了一个答案,以使其有用。

myVar在您更新的示例中不"属于"您可以获得引用的任何对象。在规范术语中,它属于EnvironmentRecord,用于匿名函数调用的执行上下文的变量环境,但是您无法直接访问该对象(在运行时可能存在,也可能不存在,这取决于使用的JavaScript引擎是如何实现的)。

你似乎相信所有对象(甚至像环境记录这样仅规范的对象)都在树中,并且可以从某个根对象的引用路径访问,因此在代码中以某种方式"可发现"。这可以理解,但事实并非如此。当然,JavaScript引擎有这样的树,用于垃圾收集目的(对于实际在运行时创建的对象),但没有,没有根,可以发现所有可以在代码中访问的内容。

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

如果你想使用变量调试代码,在变量作用域的函数内设置一个断点(例如通过添加debugger语句)