从开发者工具访问 IIFE 变量

Access IIFE variables from developer tools

让我先说明一下,我知道它不能从外部以编程方式访问 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 和开发人员工具),但如果有通用的方法也可以。

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>