4
var code = 'var n = a; x = y; status.show();\n// todo: \nconsole.log(xyz, "todo: // tests.", params);';
function parse (c) {
    var myFunc = new Function("myFunc", c); 
}

V8NODEJS環境を使用しています。では、宣言された変数と既存の関数のスコープに関する情報を取得することは可能でしょうか?

a実際、不足している変数名、、、、、およびxが必要です。 誰かが私を正しい方向に向けることができますか?ystatusxyzparams

よろしくお願いします。

4

2 に答える 2

6

UglifyJSesprimaなどのパーサーを使用してコードを解析し、変数を抽出してから、現在の環境でテストすることをお勧めします。私はかなりのJavaScriptコード分析またはコンパイル/評価を構築したので、それを行うのはそれほど難しいことではないと思います。

ただし、より簡単で高速なソリューションが必要な場合は、JSLintを試すこともできます。これをライブラリとして使用し、他のルールを無効にして「未定義の変数」のみを残すことができます。現在の環境で各エラーをテストして、それらが提供されているかどうかを確認できます。

于 2013-03-21T11:20:52.353 に答える
6

UglifyJSを使用してそれを行う方法は次のとおりです。

var UglifyJS = require("uglifyjs");
var parsed = UglifyJS.parse(code);
parsed.figure_out_scope();
parsed.globals.each(function(g) {console.log(g.name)});

ターミナルで実行してnpm install uglifyjs、これを試すことができます。質問のビットをnodeコピーして貼り付け、次に上記のコードを貼り付けます。var code = (...);これが私が得た結果です:

> parsed.globals.each(function(g) {console.log(g.name)});
a
x
y
status
console
xyz
params
于 2014-08-06T07:55:20.450 に答える