2
4

1 に答える 1

9

コメントによると、問題のコードは次のとおりです。

var scope = "global";
function checkscope() {
    console.log(scope);
    var scope;
    console.log(scope);
}

宣言 (および関数宣言) が現在のスコープの一番上まで持ち上げundefinedられるため、これは 2 回ログに記録されます。上記のスクリプトは次のように解釈されます。var

var scope = "global";
function checkscope() {
    var scope; //declaration hoisted up to top of scope
    console.log(scope);
    console.log(scope);
}

checkscopeローカル変数と同様に、ローカルscope変数はscope外側のスコープの変数を隠しscopeます。

ローカル変数には値が割り当てられていません。これは、JavaScript のネイティブ値scopeと同等です。undefined


補足: 問題の外部スコープがグローバル スコープである場合、ブラウザー環境内では、グローバル オブジェクト ( )scopeを参照することでグローバル変数にアクセスできます。window

var scope = "global";
function checkscope() {
    var scope; //declaration hoisted up to top of scope
    console.log(scope); //undefined
    console.log(window.scope); //"global"
}

ご覧のとおり、グローバル スコープで宣言された変数はwindowオブジェクトのプロパティになります。

外側のスコープが非グローバルの場合、このトリックはあまり役に立ちませんscope。名前を変更しない限り、変数はシャドウされたままになります。私の知る限り、親スコープの実行コンテキストのシャドウ プロパティ (変数/関数) にアクセスする標準化された方法はありません。

于 2013-05-05T02:57:24.770 に答える