2017-12-21 3 views
1

以下のコードは、2番目の宣言が最初の宣言を上書きするため、8を生成します。うん!完全に意味をなさない同じ変数が2回宣言されました。使用されるものはどれですか? - JAVASCRIPT

例1

function foo(){ 
    function bar() { 
     return 3; 
    } 
    return bar(); 
    function bar() { 
     return 8; 
    } 
} 
console.log(foo()); // ---> 8 

次のコードは、それが呼び出された最初の式であることを意味する3生成します。

例2

function foo(){ 
    var bar = function() { 
     return 3; 
    }; 
    return bar(); 
    var bar = function() { 
     return 8; 
    }; 
} 
console.log(foo()); // ---> 3 

Iは、上記のようにJavaScriptで、最初の宣言された変数が使用されていると結論する傾向があります。ただし、以下のコードは最終的に、私は(同じ変数を何度も宣言防ぐために)letconstを使用する7(なるほど...私の頭を悩ま)

例3

var a = 4; 
var a = 7; 
console.log(a); //---> 7 

を生成します変数を宣言するのではなく、varではなく、例2と3で生成された結果が予測できない理由を理解しようとしています。ありがとう。

+0

あり唯一の変数は(宣言が掲揚されている)のですが、割り当て(initialisations)が順番に起こります。 – Bergi

答えて

3

例1は、以下のコードに相当します。ここでbarreturnの前にオーバーライドされているため、割り当てられた最後の値で評価されます。詳細はVariable and Function Hoistingをご覧ください。

function foo(){ 
 
    function bar() { 
 
     return 3; 
 
    } 
 
    
 
    function bar() { 
 
     return 8; 
 
    } 
 
    
 
    return bar(); 
 
} 
 
console.log(foo());

例2は、以下のコードと等価です。ここでは、barが一度だけ宣言され、最初の値が割り当てられていることがわかります。 2番目の代入は戻り後に行われるため、コードには到達しません。 returnは最初の割り当てで実行されます。

function foo(){ 
 
    var bar; 
 
    bar = function() { 
 
     return 3; 
 
    }; 
 
    
 
    return bar(); 
 
    
 
    bar = function() { 
 
     return 8; 
 
    }; 
 
} 
 
console.log(foo());

何が varと同じ変数を何度も宣言するときに、後で var sは単に無視され 例3、程度。したがって、この

var a = 4; 
 
a = 7; 
 
console.log(a);

+0

意味があります。ありがとう – Lomse

1

のようないいえ、それはちょうどあなたが関数を宣言するかの違いです。

まさにvar functionName = function() {}function functionName() {}

の違いは、次の2つの機能を持って考えてみます。

var function1 = function() { 

}; 
function function2() { 

} 

差がfunction1は関数式であり、その行に達したときにのみ定義することです。

function1(); 
var function1 = function() { 

}; 

コンパイラがこの行に達すると、function1のようなエラーが発生します。

function2は関数宣言であり、全体的に(ホイストのため)です。

function2(); 
function function2() { 

} 

このコードはfunction2関数を呼び出します。

したがって、最初の例ではfunction2(関数宣言があります)と同じです。

あなたの第二の例では、それは同じだようfunction1(関数式がある)

関連する問題