Javascript 如何使用UglifyJS检查未定义的标识符

Javascript 如何使用UglifyJS检查未定义的标识符,javascript,parsing,uglifyjs,Javascript,Parsing,Uglifyjs,我想使用UglifyJS解析器来检查代码段中的任何标识符在不保证定义的情况下是否被使用 例如: // Should raise an error since myfunc and myvar have not been defined, but works var ast = jsp.parse('myfunc(myvar);'); 我意识到myfunc和myvar不一定是未定义的(因为它们可能存在于范围中),但我想知道它们何时可能是未定义的 echo“myfunc(myvar);”| ugl

我想使用UglifyJS解析器来检查代码段中的任何标识符在不保证定义的情况下是否被使用

例如:

// Should raise an error since myfunc and myvar have not been defined, but works
var ast = jsp.parse('myfunc(myvar);');
我意识到
myfunc
myvar
不一定是未定义的(因为它们可能存在于范围中),但我想知道它们何时可能是未定义的

echo“myfunc(myvar);”| uglifyjs
愉快地返回
myfunc(myvar)

如果我运行JSLint并将浏览器、窗口、node.js等全部关闭,那么这就是我想要的结果。我想对UglifyJS做一个类似的事情,假设对环境没有任何影响(没有窗口、控制台、警报等)。

您的要求很高,因为您需要确定字符串文本的某些内容是否构成有效代码。字符串文字几乎可以是字面意义上的(呵呵)任何东西。当然有可能(这是一个与“easy”截然不同的概念)指定具体的情况,根据某些规范,字符串文字在这种情况下是有效的,但是如果您想得到帮助,您需要证明您已经有了一个能够识别这种文字的算法

首先,您需要确定这样的情况,其次,声明这样的文字内容必须遵循的一组规则(正式语法将是一个很好的方法)(注意,在某些情况下,但不是所有情况下,可能可以用正则表达式来表示这样的语法)。

您可以使用“范围链”。本文介绍了变量范围

使用范围链可能很容易,也可能不容易

这是一个很好的例子

//global
function foo () {
  //global.foo
  function bar () {
    //global.foo.bar
    function baz () {
      //global.foo.bar.baz
    }
  }
}
您可以检查您的函数和/或变量是否在此范围链中定义,或者是否定义到范围链中的特定级别。(例如,global.foo.bar中的所有内容都正常)


也许这就是您解决问题的方法。

UglifyJS已经能够确定字符串是否是有效代码(它是一个解析器,所以这就是它的用途)。我的问题是如何将其解析功能扩展到标记未定义的标识符。