我想使用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做类似的事情,假设没有关于环境(没有窗口,控制台,警报等)。
答案 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中的所有内容都没问题。)
也许这就是你如何解决问题。