JavaScript环境 动态执行

2021-07-07

场景: 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;
};
copyright ©2019-2024 shenzhen
粤ICP备20041170号-1