var y = 1;
if (function f(){}) {
y += typeof f;
}
console.log(y);
以下のコードの出力を理解していません。しかし、実際の出力は「1undefined」です。私の知る限りでは、関数宣言が呼び出され、if文の中に関数fへのアクセスがあります。しかし、なぜ関数が宣言されていないかのように定義されていないのはなぜですか?
var y = 1;
if (function f(){}) {
y += typeof f;
}
console.log(y);
以下のコードの出力を理解していません。しかし、実際の出力は「1undefined」です。私の知る限りでは、関数宣言が呼び出され、if文の中に関数fへのアクセスがあります。しかし、なぜ関数が宣言されていないかのように定義されていないのはなぜですか?
条件内に関数を宣言することはできません。すぐに外に関数宣言を置くように、if文の前に、あなたが条件で、それを使用することができますし、期待通りの結果は次のようになります。
var y = 1;
function f(){}
if (f) {
y += typeof f;
}
console.log(y);
編集:まあ、結局のところあなたは実際には(*のように)CANできますが、選択した表記ではできません。これは動作します:
var y = 1, f;
if (f = function(){}) {
y += typeof f;
}
console.log(y);
を*テームはコメントで述べたように、これは本当に関数宣言ではなく、変数f
に譲渡され、参照先の匿名関数ではありません。
これは条件の関数宣言ではなく、名前付き関数式です。関数式の名前は関数内でのみ利用可能であるため、この例の 'f'は' if'ブロック内に全く定義されていません。 'y'をログに記録しようとすると、エラーが発生します。 – Teemu
も参照してください。http://stackoverflow.com/questions/10069204/function-declarations-inside-if-else-statements –
ああ、タイプミスです。「f 'をログに記録しようとすると... " もちろん。 – Teemu