2016-07-27 8 views
5

以下のコードは、ブラウザとNode.jsの表示が異なります。ネイティブブラウザとNode.jsのJavaScript関数宣言が異なる結果を返す

ブラウザの結果はaです。

Node.jsの結果はbです。

if (1) { 
    function foo() { return 'a'; } 
} else { 
    function foo() { return 'b'; } 
} 

console.log(foo()); 

このコードスタイルは反パターンですが、コードはまだ環境内で実行できます。

どのように説明しますか?


FYI。

これらのリンクは多分永久的ではありません。

+2

関数の宣言は、標準的な私の知る限りではありませんので、あなたは行動が実装間で同じであることを期待すべきではありません。 – elclanrs

答えて

0
if (1) { 
    foo(); 
} else { 
foo1(); 
} 
function foo() { return 'a'; } 
function foo1() { return 'b'; } 
console.log(foo()); 

ブロック内の機能の動作が異なる場合があります。上記のコードは期待どおり完全に動作します。

+0

ご返信ありがとうございます。しかし、より良いコーディングスタイルを得る代わりに、結果が異なる理由を知りたい。 :) – Husky

+0

詳細な説明については、以下のリンクを参照してください。 'http://stackoverflow.com/questions/10069204/function-declarations-inside-if-else-statements' –

1

あなたのコードを見て、それをネイティブブラウザとnodeJSの両方で分析しました。私の知る限り、ノードでは、2番目の宣言で同じ名前の関数は上書きされますが、ネイティブブラウザのjavascriptではそうではありません。さらに2つの環境の作業を検討するには、次のコードを使用して、あなたは違いが表示されます。

if (1) { 
    console.log('In condition 1'); 
    function foo() { 
     console.log('Inside first declaration'); 
     return 'a'; 
    } 
} else { 
    console.log('In condition 2'); 
    function foo() { 
     console.log('Inside second declaration'); 
     return 'b'; 
    } 
} 

console.log(foo());