質問する
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 に答える