41

グローバルJavaScript変数を宣言する正しい方法はどれですか?私が試している方法はうまくいきません

$(document).ready(function() {

    var intro;

    if ($('.intro_check').is(':checked')) {
        intro = true;
        $('.intro').wrap('<div class="disabled"></div>');
    };

    $('.intro_check').change(function(){
        if(this.checked) {
            intro = false;
            $('.enabled').removeClass('enabled').addClass('disabled');
        } else {
            intro = true;
            if($('.intro').exists()) {
                $('.disabled').removeClass('disabled').addClass('enabled'); 
            } else {
                $('.intro').wrap('<div class="disabled"></div>');
            }
        }
    });
});

console.log(intro);
4

8 に答える 8

86

グローバル変数を宣言している場合、何らかの名前空間を使用したい場合があります。名前空間を外部で宣言するだけで、必要なものを何でも入れることができます。このような...

var MyProject = {};
$(document).ready(function() {
    MyProject.intro = "";

    MyProject.intro = "something";
});

console.log(MyProject.intro); // "something"
于 2012-06-22T08:53:29.643 に答える
35

これを宣言する

var intro;

の外では$(document).ready()$(document).ready()変数をグローバルスコープから非表示にします。

コード

var intro;

$(document).ready(function() {
    if ($('.intro_check').is(':checked')) {
        intro = true;
        $('.intro').wrap('<div class="disabled"></div>');
    };
    $('.intro_check').change(function(){
        if(this.checked) {
            intro = false;
            $('.enabled').removeClass('enabled').addClass('disabled');
        } else {
            intro = true;
            if($('.intro').exists()) {
                $('.disabled').removeClass('disabled').addClass('enabled'); 
            } else {
                $('.intro').wrap('<div class="disabled"></div>');
            }
        }
    });
});

@Zakariaのコメントによると

別の方法:

window.intro = undefined;

$(document).ready(function() {
    if ($('.intro_check').is(':checked')) {
        window.intro = true;
        $('.intro').wrap('<div class="disabled"></div>');
    };
    $('.intro_check').change(function(){
        if(this.checked) {
            window.intro = false;
            $('.enabled').removeClass('enabled').addClass('disabled');
        } else {
            window.intro = true;
            if($('.intro').exists()) {
                $('.disabled').removeClass('disabled').addClass('enabled'); 
            } else {
                $('.intro').wrap('<div class="disabled"></div>');
            }
        }
    });
});

ノート

console.log(intro);

DOM Ready関数の外部(現在はログに記録されています)はログundefinedに記録されますが、DOMready機能の範囲内ではtrue/falseが返されます。

console.logすべてのリソースがDOMに表示された後、つまりDOMが準備された後、DOMレディが実行されるため、DOMレディ実行の前に外部実行するため、常にばかげた結果が得られると思います。


@W0rldartのコメントによると

DOM対応機能以外で使用する必要があります

次のアプローチを使用できます。

var intro = undefined;

$(document).ready(function() {
    if ($('.intro_check').is(':checked')) {
        intro = true;
        introCheck();
        $('.intro').wrap('<div class="disabled"></div>');
    };
    $('.intro_check').change(function() {
        if (this.checked) {
            intro = true;
        } else {
            intro = false;
        }
        introCheck();
    });

});

function introCheck() {
    console.log(intro);
}

の値を変更した後intro、新しい値で起動する関数を呼び出しましたintro

于 2012-06-22T08:51:20.570 に答える
16

JavaScript には関数レベルの変数スコープがあります。つまり、$(document).ready()関数の外で変数を宣言する必要があります。

または、変数にグローバルスコープを持たせるには、var以下に示すように、その前にキーワードを使用しないでください。ただし、これはグローバルスコープを汚染するため、一般的に悪い習慣と見なされますが、決定するのはあなた次第です。

$(document).ready(function() {
   intro = null; // it is in global scope now

詳細については、以下をご覧ください。

于 2012-06-22T08:52:52.383 に答える
7

window.introの中で使い$(document).ready()ます。

于 2012-06-22T08:53:03.227 に答える
2

このように:introドキュメントの外に出してください。ここで良い議論をしてください: http://forum.jquery.com/topic/how-do-i-declare-a-global-variable-in-jquery @thecodeparadox は驚くほど高速です :P とにかく!

 var intro;

$(document).ready(function() {



    if ($('.intro_check').is(':checked')) {
        intro = true;
        $('.intro').wrap('<div class="disabled"></div>');
    };

    $('.intro_check').change(function(){
        if(this.checked) {
            intro = false;
            $('.enabled').removeClass('enabled').addClass('disabled');
        } else {
            intro = true;
            if($('.intro').exists()) {
                $('.disabled').removeClass('disabled').addClass('enabled'); 
            } else {
                $('.intro').wrap('<div class="disabled"></div>');
            }
        }
    });
});
于 2012-06-22T08:52:00.227 に答える
2

他のプログラミング言語とは異なり、関数の外で宣言された変数は自動的にグローバルになります。

<script>

//declare global variable
var __foo = '123';

function __test(){
 //__foo is global and visible here
 alert(__foo);
}

//so, it will alert '123'
__test();

</script>

問題は、関数内で変数を宣言することですready()。つまり、関数内でのみ (スコープ内で) 可視になりready()、外部では可視になりません。

解決策:グローバルにします。つまり、これを外部で宣言します$(document).ready(function(){});

于 2012-06-22T08:59:46.703 に答える
1

window.intro = "value";ready 関数内で使用します。あなたがそうなりたいならそう"value"かもしれませんvoid 0undefined

于 2012-06-22T08:52:31.443 に答える