1465 次
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 に答える