【问题标题】:Is there a way to get the scopes of a function from outside the function - JS有没有办法从函数外部获取函数的范围 - JS
【发布时间】:2019-02-15 00:16:45
【问题描述】:

在网页上使用 chrome devtools 控制台时,我在搜索如何从函数中访问局部变量时,我意识到您可以在手动检查对象中的函数时查看范围。

我使用返回的getEventListeners(window).load[2] 访问了函数

▼{listener: ƒ, useCapture: false, passive: false, once: false, type: "load"} ►listener: ƒ () once: false passive: false type: "load" useCapture: false ►__proto__: Object

当我点击监听函数时,它显示了一个对象 ►[[Scopes]]: Scopes[3]

scopes 对象给出了函数中使用的所有变量的列表(这是我正在寻找的)。但是,我只能手动访问这些。没有什么比得上getEventListeners(window).load[2].listener.Scopes

是否有任何类型的函数或方法可以自动返回这些变量。如:

var foo = getEventListeners(window).load[2].listener.Scopes[0]

谢谢

【问题讨论】:

标签: javascript google-chrome-devtools


【解决方案1】:

我认为不可能,因为可能代表 Javascript 存在安全问题

如果不是这样,那么当您尝试获取这些变量时,垃圾收集器可能会删除您正在寻找的变量

您可以在此处阅读有关内存管理的更多信息:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_Management

【讨论】:

    【解决方案2】:

    是否有任何类型的函数或方法可以自动返回这些变量。

    不,这是不可能的。 EnvironmentRecords 在“用户空间”代码中不可访问。函数和环境之间的关联是函数内部的,规范没有定义任何访问该信息的方式。

    但当然存在关联,因此开发人员工具可以公开该信息以进行调试。

    【讨论】:

      【解决方案3】:

      首先,你必须使用

      var foo = getEventListeners(window).load[2].listener['[[Scopes]]']

      因为您忘记了额外的方括号,其次,它们实际上不适用于您的 JavaScript,仅适用于 devTools。

      还有一个假的[[FunctionLocation]] 也不可用

      【讨论】:

        猜你喜欢
        • 2011-04-27
        • 1970-01-01
        • 2012-05-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-18
        • 1970-01-01
        • 2011-02-07
        相关资源
        最近更新 更多