我想用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?
的位置答案 0 :(得分:3)
不,那是不可能的。这是一个功能。它允许引擎以各种方式优化局部变量,包括完全消除它们。如果没有这种能力,JavaScript程序的运行速度会比现在慢得多。您可以获得的最好的是调试器界面提供的内容,并且这只是尝试重建尽可能多的信息的尽力而为。根据功能如何优化,可能不完整甚至是错误。
此外,闭包是JavaScript表达正确封装的唯一方法。这样的图书馆会打破这个财产。