【问题标题】:Access IIFE variables from developer tools从开发人员工具访问 IIFE 变量
【发布时间】:2016-08-08 09:41:03
【问题描述】:

让我先说我知道它不是以编程方式从外部访问 IIFE 的内部变量,除非它们已被全局范围访问。

例如:

(function() {
    var a = "Hello"; // a isn't accessible from the outer scope
)();

console.log(a); // a is undefined

但是:

(function() {
    var a = "Hello";
    global.a = a;
)();

console.log(a); // Displays "Hello"

在某些情况下,IIFE 可能会持续执行几秒钟,或者在整个页面浏览期间执行,通常是在使用 JavaScript 编写的游戏的情况下,其中 IIFE 将包含游戏循环。

因此,IIFE 中声明的所有变量和函数都必须存在于浏览器内存中,但由于封装的原因,它们无法从开发者控制台中显示出来。

我的问题是:有没有什么方法可以在运行时显示或操作它们,而无需事先修改代码?由于这些变量存在于内存中并被使用?也许通过某种调试?

我的问题主要针对 Firefox 和 Chrome(Firebug 和开发人员工具),但如果有通用的方法也可以。

【问题讨论】:

    标签: javascript developer-tools iife


    【解决方案1】:

    Put a breakpoint 在 IIFE 中,位于将来会运行的代码行上。

    当断点被命中时,控制台将在那个范围内。

    (function() {
      document.querySelector("button").addEventListener("click", myFunction);
    
      var a = 1;
      
      function myFunction (ev) {
        debugger; // You could also add this breakpoint using the Dev Tools UI
        console.log("A is ", a);
      }
    })();
    <button>Button</button>

    【讨论】:

    • 这是否允许我编辑变量(并让其余代码使用编辑后的值)?
    • 是的。 (而且由于 cmets 有最小长度,我用了 10 秒来检查答案中的演示)。
    • 谢谢你,简单而有效。 (我尝试检查该演示,但没有找到代码)
    猜你喜欢
    • 1970-01-01
    • 2010-10-17
    • 1970-01-01
    • 1970-01-01
    • 2017-06-05
    • 2020-03-27
    • 2012-08-01
    • 2018-10-23
    • 1970-01-01
    相关资源
    最近更新 更多