2016-07-21 4 views
1
function foo1() { 
    return { 
     bar: "hello" 
    }; 
} 

function foo2() { 
    return 
    { 
     bar: "hello" 
    }; 
} 

console.log(foo1()); 
console.log(foo2()); 

なぜコードが同じに見えても、2つの関数が異なる結果を出力する理由を説明できますか?これらの構文上同じ機能が異なる結果をもたらす理由を教えてください。

+0

また、[参考リンク](http://stackoverflow.com/questions/2846283/what-are-the-rules-for-javascripts-automatic-semicolon-insertion-asi)もご覧ください。 –

答えて

9

自動セミコロン挿入

the specificationを引用

continueは、breakは、returnは、throw、またはyieldトークンが検出された

LineTerminatorは、次のトークンの前に発生しました、 continuebreakreturn、の後ろにセミコロンが自動的に挿入されます。、またはyieldトークン。この

function foo2() { 
    return;   // Note the `;` after `return` 
    { 
     bar: "hello" 
    }; 
} 

return文が終了した後、基本的には到達できないコードであることの後にオブジェクトが存在するよう

ので、コードがなります。 returnステートメントは明示的に何も返しませんので、undefinedが返されます。

関連する問題