0

私はこのコードを持っています

var a = 5;
function woot(){
    console.log(a);
    var a = 6;
    function test(){ console.log(a);}
    test();
  };
woot();

私は出力として 5 と 6 を期待していますが、代わりに未定義と 6 があります。

何かご意見は?。

4

3 に答える 3

4

変数宣言は、それらが表示されるスコープの先頭に引き上げられます。コードは次のように解釈されます。

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は、グローバル スコープで宣言した を隠します。

于 2013-04-28T21:59:38.943 に答える
0

その時:

function woot(){
console.log(a);

..aまだ存在しません! アウターを使用する場合は、次のaように呼び出す必要があります。

console.log( window.a );

すでに関数内にある を削除するaと、今はリラックスして、console.log(a);外側の関数を参照するものを使用できます (関数にはもうないため)

それ以外の場合は、 を使用console.log( window.a );して 2 つを区別しalphasます。

于 2013-04-28T23:01:16.673 に答える