1

私は現在、グローバル スコープとローカル スコープに対する Javascript の興味深い解釈を理解しようとしています。

私の質問は、なぜ次のものが返されるのundefinedですか?

var a = 100;
function local() {
    if (false) {
        var a = 50;
    }
    alert(a);
}

さらに、これを実行しました:

var a = 100;
function local() {
    alert(a);
}

結果は100点という圧倒的な数字でした。

Javascript で使用できる PHPグローバルキーワードのように、グローバル スコープから変数を取得するときに指定できる方法はありますか?

4

3 に答える 3

4

巻き上げのため。

これは、すべての変数宣言が関数の先頭にポップされることを意味するため、実行される実際のコードは次のとおりです。

var a = 100;
function local(){
    var a;
    if (false)
        a = 50;

    alert(a);
}

グローバル VS とはほとんど関係ありません。alocal の場合、外部変数を内部変数で隠しただけaです。

Javascript で使用できる PHP グローバル キーワードのように、グローバル スコープから変数を取得するときに指定できる方法はありますか?

いいえ


コメントの質問について「if条件が失敗した場合にグローバル変数を使用するように戻したい場合(意図的にそうしました)、どうすればできますか?」

使用できますeval

var a = 100;
function local() {
    if (false) {
        eval('var a = 50;');
    }
    alert(a);
}

ライブデモ

しかし、あなたはすべきではありません!

于 2013-09-17T18:44:37.390 に答える