2016-11-22 7 views
0

グローバルスコープを汚染する変数がたくさんあるようなプロジェクトを継承しました。そのすべてを探したいと思います。ユーザーが導入したグローバル変数を見つける最良の方法は何ですか?私はデフォルトでそこにあるウィンドウオブジェクトのプロパティを除外し、私たちのコードによって導入されたものにフィルタをかけます。これらを簡単に識別できるツールやIDEプラグインはありますか?おかげJavascriptでグローバル変数を見つける最良の方法

+0

私はjslintがローカル宣言されていない変数について警告すると思います。標準のウィンドウプロパティに対して誤検出が発生する可能性がありますが、それらをスキップするのは困難ではありません。 – Barmar

+0

ここにSO [post1](http://stackoverflow.com/questions/17276206/list-all-js-global-variables-used-by-site-not-all-defined)[post2]のいくつかの投稿がありますhttp://stackoverflow.com/questions/8369338/javascript-dumping-all-global-variables) –

答えて

3

があなたのウィンドウ・オブジェクトのキーを比較jsFiddle https://jsfiddle.net/noevgh4u/1/にこの例を作成「空の」ウィンドウオブジェクトのキーを使用します。

(function(){ 
    var iframe = document.createElement('iframe'); 
    iframe.src = "about:blank"; 
    document.body.appendChild(iframe); 

    var windowVars = Object.keys(iframe.contentWindow); 
    var globalVars = Object.keys(window).filter(key => !windowVars.includes(key)); 

    console.log("global Vars:", globalVars); 
    document.body.removeChild(iframe); 
})(); 

これで、宣言されている行を見つけるためにコードを検索する必要があります。

-1

はこれを試してみてください...これはページ上のすべての関数と変数の一覧が表示されます

for(var stuff in window) { 
    if(window.hasOwnProperty(stuff)) console.log(stuff); 
} 

、超便利ではないかもしれませんが、あなたにいくつかのより多くの情報を与えるかもしれません。

Chromeデベロッパーツールを開くと試してみることができます。変数var life = 42を作成すると、上記forループを実行した後に表示されます。

1

ウィンドウオブジェクトの例を取得:https://jsfiddle.net/noevgh4u/

オブジェクトの例の比較:https://jsfiddle.net/noevgh4u/1/

私はあなたの好みのブラウザで空白のページを開くことであろうと考えることができる最も現実的な方法、書き出しますそのウィンドウのプロパティに基づいたオブジェクトです。

この例では、ページのテキストからそのオブジェクトをコピーしています。

グローバルを確認するアプリケーションに貼り付けます。

アプリケーションでは、あなたが今、あなたのアプリケーションキーを含む空白のWindowsキーとNEWOBJを含むOBJのを持つように

var newObj; 
for(prop of Object.keys(window)) { 
newObj[prop] = null; 
}; 

を使用して新しいオブジェクトを作成します。

次に、このようなDeep comparison of objects/arrays

か何か等の方法を使用して2つを比較:

function filterKeys(a, b) { 
var firstKeys = Object.keys(a); 
var secondKeys = Object.keys(b); 
var missingKeys = firstKeys.filter(val => !secondKeys.includes(val)); 
return missingKeys; 
} 
var createdVarsAndFuncs = filterKeys(obj, newobj); 

私は

関連する問題