问答

javascript转成ast后,如何确定两个同名变量等是否是同一作用域下

作者:admin 2021-05-06 我要评论

转换工具是: https://astexplorer.net/ 代码如下: const { parse, print, visit } = require('recast')const ast = parse(`function test(samename){ samename(1...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

image.png
转换工具是:https://astexplorer.net/
代码如下:

const { parse, print, visit } = require('recast')

const ast = parse(`function test(samename){
  samename(123);
  var b = {
    c: function (samename){
      samename(456)
    },
    d: function() {
      samename(789)
    }
  }
}`)

const funcAst = ast.program.body[0]

const arg = funcAst.params[0]

console.log(arg)

visit(funcAst, {
  visitCallExpression(path) {
    // 如何检查path.value.callee是不是和arg是同一个变量
    console.log(path.value.callee)
    this.traverse(path)
  }
})
###

如果只是这一个问题的话,逐级往上找BlockStatement,然后确定是哪个块级作用域下的。
实际通用做法是,维护一个表,在walk时更新表或对表进行查找。

当然,你也可以自己实现parser,或者有些parser库也支持自定义插件扩展。这样,可以在所有的闭包(块)开始,把所有你想要的数据传递给子级,甚至可以设计观察者模式,将每个Node都设计成可观察的对象都是可以的。你可以自由发挥。

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • javascript转成ast后,如何确定两个同名

    javascript转成ast后,如何确定两个同名

  • js 循环改造格式的问题

    js 循环改造格式的问题

  • Java高级程序员要具备什么能力

    Java高级程序员要具备什么能力

  • python3 如何获取当前文件夹名字

    python3 如何获取当前文件夹名字

腾讯云代理商
海外云服务器