场景: JavaScript环境不允许使用 eval 的话 用 JavaScript 编写的 JavaScript 解析器。 eval.js 将它生成的 AST 转换为 JavaScript 函数闭包,在运行时执行整个程序。
具体:
- 初始时, 创建一个对象
- 大部分繁重的工作由 acorn 完成 - 解析AST
- AST的动作对应上对函数的成员属性进行操作
- 在其声明, 然后进行调用
这样就可以绕过eval的限制 做自定义逻辑下发了
包:
exports.evaluate = function (code) {
var env = new Environment(global);
var iterator = env.gen(code)();
var result = iterator.next();
while (!result.done) {
result = iterator.next();
}
return result.value;
};