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

时间:2012-09-19 13:01:39

标签: javascript parsing uglifyjs

我想使用UglifyJS解析器检查一段代码中的任何标识符是否在不能保证定义时使用。

示例:

// Should raise an error since myfunc and myvar have not been defined, but works
var ast = jsp.parse('myfunc(myvar);');

我意识到myfuncmyvar不是必然未定义(因为它们可能存在于范围内)但我想知道它们何时可能未定义。

echo "myfunc(myvar);" | uglifyjs愉快地返回myfunc(myvar);,我找不到任何检查未定义变量的选项。

如果我运行JSLint并将assume browser, window, node.js, etc 全部关闭,那么这就是我所追求的结果。我想与UglifyJS做类似的事情,假设没有关于环境(没有窗口,控制台,警报等)。

2 个答案:

答案 0 :(得分:0)

你有一个非常高的订单,因为你期望确定字符串文字的某些内容是否构成有效的代码。字符串文字可以几乎字面上(呵呵)任何东西。当然有可能(这是一个非常不同的概念,从“简单”)指定字符串文字根据某些规范预期有效的确切环境,但如果你想要帮助这样做,你需要表明你已经有了一个可以识别这种文字的算法。

首先,你需要确定这样的情况,其次,陈述一套规则(一种正式的语法将是一种很好的方法)这样的文字内容必须遵循(注意在某些情况下,但不是全部,情况,有可能用正则表达式来表达这样的语法。)

答案 1 :(得分:0)

您可以使用“范围链”。可变范围在本文http://tore.darell.no/pages/scope_in_javascript中进行了描述。

使用Scope链可能很容易,也可能不是......

这是一个来自artcile的好考试

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

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

也许这就是你如何解决问题。