是否可以通过V8插件读取功能关闭?

时间:2016-09-08 20:32:14

标签: c++ closures v8 node-gyp embedded-v8

我想用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

的位置

1 个答案:

答案 0 :(得分:3)

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

此外,闭包是JavaScript表达正确封装的唯一方法。这样的图书馆会打破这个财产。