1

if に依存する変数を渡す必要があります。このコードを書きました

var firstFoo  = 2;

$('div').click(function() {
    if(firstFoo == 1){
        var
            var1 = 'var1',
            var2 = 'var2',
            var3 = 'var3';
    }
    else{
        var
            var1 = 'no var1',
            var2 = 'no var2',
            var3 = 'no var3';
    }

    $('<span></span>',{
        'data-var1': var1,
        'data-var2': var2,
        'data-var3': var3
    }).insertAfter(this);
});

コードは正常に動作します。jsfiddle http://jsfiddle.net/Xn7xG/の例を参照してください。

しかし、JSHintをクリックするとエラーが発生しました

(var は既に定義されています) & (var は範囲外で使用されています)

ここに画像の説明を入力

そして、それが私のコードがすべてのブラウザーや状況で正常に機能しないことを意味するかどうかはわかりません

上記のコードを書く正しい方法は何ですか?

4

1 に答える 1

4

JavaScript にはブロック スコープの概念がなく、すべての変数はそれぞれの関数スコープ/グローバル スコープで宣言されます。

あなたの場合、同じ機能スコープで同じ変数を2回宣言しています。これが警告の理由です....ページの下部で変数を宣言しても、そのスコープはホイストのためにページ全体になりますこれ

var firstFoo = 2;

$('div').click(function () {
    var var1, var2, var3;
    if (firstFoo == 1) {
        var1 = 'var1';
        var2 = 'var2';
        var3 = 'var3';
    } else {
        var1 = 'no var1';
        var2 = 'no var2';
        var3 = 'no var3';
    }

    $('<span></span>', {
        'data-var1': var1,
        'data-var2': var2,
        'data-var3': var3
    }).insertAfter(this);
});
于 2013-09-26T11:55:13.883 に答える