是否可以通过 V8 插件读取函数闭包?

Is it possible to read function closure via V8 addon?

我想用 C++ 编写一个 Node.js V8 插件,让我可以访问函数闭包。

像这样:

const myAddon = require('./build/Release/addon');

const counter = (() => {
  let i = 0;
  return () => ++i;
})();

counter(); // 1
counter(); // 2

const closure = myAddon(counter);
console.log(closure.i); // prints "3"

可能吗?此信息存储在 V8 engine?

的何处

不,那是不可能的。这是一个特点。它允许引擎以各种方式优化局部变量,包括完全消除它们。如果没有这种能力,JavaScript 程序将 运行 比现在慢得多。您可以获得的最好的是调试器接口提供的内容,而这只是尽可能多地重建信息的最佳尝试。根据函数的优化方式,它可能不完整甚至错误。

此外,闭包是 JavaScript 中表达适当封装的唯一方式。这样的库会破坏 属性.