if(node.type === 'CallExpression') { // 函数 const callee = 调用 Identifier 处理器 // 参数 const args = node.arguments.map(arg => { return 调用 Literal 处理器 }); callee(...args); }
代码
这里有一份简单的实现, 可以跑通上面的流程, 但也仅仅可以跑通上面而已, 其他的特性都还没实现。
https://github.com/noahlam/practice-truth/tree/master/js2js
其他实现方式
除了上面我介绍得这种最繁琐得方式外,其实 js 还有好几种可以直接执行字符串代码得方式
1.插入 script DOM
const script = document.createElement("script"); script.innerText = 'alert("hello world!")'; document.body.appendChild(script);
2.eval
eval('alert("hello world!")')
3.new Function
new Function('alert("hello world")')();
4.setTimeout 家族
setTimeout('console.log("hello world")');
不过这些在小程序里面都被无情得封杀了...