作用域内变量替换

发布时间:2022-06-26 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了作用域内变量替换脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

https://www.jianshu.com/p/a3857fa5c899

 

 

const fs = require('fs');
const { parse } = require("@babel/parser");
const traverse = require("@babel/traverse").default;
const t = require("@babel/types");
const generator = require("@babel/generator").default;

let jscode = `

var a = window;
let b = a.btoa("Hello,AST")

`;

let ast = parse(jscode);

const visitor = {
    VariableDeclarator(path) {
        const { id, init } = path.node;
        // 类型是Identifier, 并且name属性为 window
        if (!t.isIdentifier(init, { name: "window" })) { return }
        let name = id.name
        let scope = path.scope;
        const binding = scope.getBinding(name); // 获取windows在当前节点的作用域中的值
        if (!binding || binding.constantViolations.length !== 0) { return };
        scope.rename(name, 'window')  //重点,上边有笔记
        path.remove()
    }
}




traverse(ast, visitor);
let { code } = generator(ast);
console.log(code);

 

脚本宝典总结

以上是脚本宝典为你收集整理的作用域内变量替换全部内容,希望文章能够帮你解决作用域内变量替换所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: