0

我想使用 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 并assume browser, window, node.js, etc 全部关闭,那么这就是我想要的结果。我想用 UglifyJS 做类似的事情,假设对环境没有任何影响(没有窗口、控制台、警报等)。

4

2 回答 2

0

您的要求很高,因为您希望确定字符串文字的某些内容是否构成有效代码。字符串文字几乎可以是字面上的(呵呵)任何东西。当然可以(这是一个与“简单”完全不同的概念)指定根据某些规范预期字符串文字有效的确切情况,但如果您需要帮助,您需要表明您已经有了一个可以识别此类文字的算法。

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

于 2012-09-20T09:13:43.687 回答
0

您可以使用“范围链”。这篇文章http://tore.darell.no/pages/scope_in_javascript中描述了变量范围。

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

这是来自文章的一个很好的例子

//global
function foo () {
  //global.foo
  function bar () {
    //global.foo.bar
    function baz () {
      //global.foo.bar.baz
    }
  }
}

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

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

于 2012-09-20T09:23:29.210 回答