以下のコードについて疑問が4つあります
詳しい方ご教示頂けないでしょうか???
尚以下のコード、コード内の日本語は本に書いてあったものをそのまま引用しています。
引用元「開眼!Javascript p101」
javascript
1>var countUpFromZero = function() { 2>var count = 0; 3>return function() { // 子関数を返す 4>return ++count; // 変数 count は親関数で定義されている 5>}; 6>}(); // countUpFromZero は呼ばれると即時実行し、無名関数を返す 7>/* countUpFromZero() に返された子関数はその親関数の変数 count にアクセスする必要がある 8>ため、それを保持する。countUpFromZero() を実行するたびに return ++count が実行される。 9>*/ 10>console.log(countUpFromZero()); // 出力:1 11>console.log(countUpFromZero()); // 出力:2 12>console.log(countUpFromZero()); // 出力:3
1.このコードではまず即時関数
引用テキストfunction() {var count = 0;
return function() { // 子関数を返す
return ++count; // 変数 count は親関数で定義されている
};
}();
が書かれていて、即時関数なので書いた瞬間に実行され、その結果
「countUpFromZero」
には
function() { // 子関数を返す
var count = 0;
return ++count; // 変数 count は親関数で定義されている
};」
が入っていると考えたのですが、これは間違っているのでしょうか?
2.「関数countUpFromZero」を1回だけ「countUpFromZero();」で呼び出した時、
「countUpFromZero」
には
function() { // 子関数を返す
var count = 0;
return ++count; // 変数 count は親関数で定義されている
};」
が入っているので、この無名関数が実行され、その結果
「countUpFromZero」
には
「count=1」
が入ると考えたのですがこれは間違っているのでしょうか?
3.2の考えがもし合っているのであれば上記コードのs「出力1、出力2、出力3」は間違っている気がするのですが、合っているのでしょうか?
実際に上記コードを私がコンソールで実行した所「undefined」と表示されてしまいました・・・
---以下追記した部分となります---
私が間違っていると思ったのは、私は出力1の所にcount=1,出力2の所にcount=2,出力3の所にcount=3,がコンソールに表示されると思ったので間違っていると考えました
あと、上記コードをGoogle developer toolsのconsoleの所に貼り付けてenterキーを押して確かめたところundefinedと表示されてしまいました・・・