2011-01-31 11 views
5

このjsLintような書き込みコードが暗黙のグローバル文句:回避暗黙のグローバル(JSlint)

var Test = (function(){ 
    var fnc = function(x){ 
     alert("pew: "+x); 
    }; 

    return { 
     fnc: fnc 
    }; 
}()); 

Test.fnc("hat"); 

(具体的には、 'グローバルインプライド:4警告')正しい方法と考えられている何

これを避けるには?私の本能的な反応は、このですが、私はそれが「正しい」です確信していない:

var Test2 = (function(global){ 
    var alert = global.alert; 

    var fnc = function(x){ 
     alert("pew: "+x); 
    }; 

    return { 
     fnc: fnc 
    }; 
}(this)); 

Test2.fnc("hat"); 

編集: コンセンサスは、それはだ、問題は、私はグローバルにアクセスしていたという事実はないことのようですさらに、私は、グローバルが何であるかをjslintに伝えていません。他の誰かが入力しているかどうかを確認するために、これをもう少し開いておきます。

答えて

8

あなたはコメント

/*global alert $ document window*/

を使用してファイルを付加することができますこれは私がそれを暗示が、外部ではないということJSLintを伝える方法が一般的です。

これは、他のプログラマーにあなたの外部プログラマにこれらの変数を宣言していることを邪魔にならないようにするだけでなく、より大きなマルチファイルプログラムに役立つことを伝えます。

+2

IIRC変数名の宣言をコンマ区切りにする必要はありませんか? –

+0

@ZackTheHumanそこにスペースがあります。 JSLintはカンマ区切りであると言います。私は常にスペースのないリストをエラーなく使用しました。おそらく両者を扱います。 – Raynos

+0

コメントの開始と 'global'の間にはスペースを入れてはいけません。さもなければ、jslintはそれを処理しません。 – oyenamit

4

jsLintの「ブラウザを想定する」および「コンソール、アラート、仮定する」オプションを使用して、これらの機能をjsLintに知らせます。 利用可能なすべてのオプションのリストについては、http://www.jslint.com/lint.html#optionsを参照してください。

0

私はあなたの方法は、(あまりにも良い)正しいと思うが、global.alertを宣言する必要はありません、だけではなく、JSHint探し方のためglobal.alert("pew: "+x);

+0

'var alert = global.alert'は便宜上のものなので、エラーが出てしまった場合と同じように動作します。 – david

+0

私はそれを使用することによって何の利便性も見ません。しかし、この部分とは無関係に、あなたの解決策は正しいというだけではないと思います。 –

1

を使用し、設定することができますオプション「ブラウザ」があります"true"に設定し、すべての共通グローバルを処理します。 「jquery」と同じです。私はこれをgradle-js-plugin source codeから学んだ。

関連する問題