是否可以通过 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 中表达适当封装的唯一方式。这样的库会破坏 属性.
我想用 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 中表达适当封装的唯一方式。这样的库会破坏 属性.