本でYou Don't Know JS: Scope & Closuresこのサンプルコードは完全にわかりません。条件式内の関数宣言
foo(); // "b"
var a = true;
if (a) {
function foo() { console.log("a"); }
}
else {
function foo() { console.log("b"); }
}
それが何を意味する:
は、「通常のブロックの中に現れる関数の宣言は、一般的ではなく、このコードが示すように、条件付きであるより、囲みスコープにホイスト」?それはどのように可能ですか?条件は機能していませんか?
引用符で囲まれた文が正しくありません。 – RobG
*「それはどういう意味ですか?」*関数宣言は他の場所と同様に呼び出されます。 * "条件が機能していないのですか?" *動作していますが、コードが実行される前に巻き上げが行われます。実際にはブロック内の関数宣言*が無効なので、実際はもっと複雑です。しかし、ブラウザはそれらを許可し、異なる動作を実装します。 [異なるブラウザで関数の宣言が異なるのはなぜですか?](http://stackoverflow.com/q/8871974/218196) –
'var a = true; const foo = a? ()=> console.log( 'a'):()=> console.log( 'b'); foo(); 'その後、' foo'が吊り上げられないので、コンソールは 'a'をログに記録します。 – Josep