私はこのコードを持っています
var a = 5;
function woot(){
console.log(a);
var a = 6;
function test(){ console.log(a);}
test();
};
woot();
私は出力として 5 と 6 を期待していますが、代わりに未定義と 6 があります。
何かご意見は?。
私はこのコードを持っています
var a = 5;
function woot(){
console.log(a);
var a = 6;
function test(){ console.log(a);}
test();
};
woot();
私は出力として 5 と 6 を期待していますが、代わりに未定義と 6 があります。
何かご意見は?。
変数宣言は、それらが表示されるスコープの先頭に引き上げられます。コードは次のように解釈されます。
var a; // Outer scope, currently undefined
a = 5; // Outer scope, set to 5
function woot(){ // Function declaration, introduces a new scope
var a; // Inner scope, currently undefined
console.log(a); // Refers to inner scope 'a'
a = 6; // Inner scope, set to 6
function test(){ console.log(a);} // Refers to inner scope 'a' (now 6)
test();
};
woot();
関数内で変数を宣言すると、その変数は、祖先スコープで宣言された同じ識別子を持つ変数を隠します。あなたの例でa
は、グローバルスコープで宣言しています。次に、関数のスコープ内で同じ識別子を持つ別の変数を宣言しwoot
ます。この変数a
は、グローバル スコープで宣言した を隠します。
その時:
function woot(){
console.log(a);
..a
まだ存在しません! アウターを使用する場合は、次のa
ように呼び出す必要があります。
console.log( window.a );
すでに関数内にある を削除するa
と、今はリラックスして、console.log(a);
外側の関数を参照するものを使用できます (関数にはもうないため)
それ以外の場合は、 を使用console.log( window.a );
して 2 つを区別しalphas
ます。