LoginSignup
0
0

More than 1 year has passed since last update.

クロージャーがよく分からない、と思ったらもっと根本的な部分で分かってなかった

Last updated at Posted at 2022-09-30

※ タイトル変更しました

しっくりこない事

例えば、

JSprimerより引用
const createCounter = () => {
    let count = 0;
    return function increment() {
        // 変数`count`を参照し続けている
        count = count + 1;
        return count;
    };
};
// countUpとnewCountUpはそれぞれ別のincrement関数(内側にあるのも別のcount変数)
const countUp = createCounter();
const newCountUp = createCounter();
// 参照してる関数(オブジェクト)は別であるため===は一致しない
console.log(countUp === newCountUp);// false
// それぞれの状態も別となる
console.log(countUp()); // => 1
console.log(newCountUp()); // => 1

といった場合に、何が出来るのかは分かる。

?なのは、
countUp()newCountUp()を呼ぶたびに、なぜlet count = 0;が実行されないのか?ということ。
毎回countが初期化されてしまうのでは?と思ってしまう・・・。

これだって、

JSprimerより引用
function greaterThan(n) {
    return function(m) {
        return m > n;
    };
}
// 5より大きな値かを判定する関数を作成する
const greaterThan5 = greaterThan(5);
console.log(greaterThan5(4)); // => false
console.log(greaterThan5(5)); // => false
console.log(greaterThan5(6)); // => true

const時の5は、普通にfunction greaterThan(n)nに設定されていると思うが、
以降の3回の呼び出しではmに代入されているようだし・・・

現時点での自分の理解としては、
constで定義した後の呼び出しでは、return文しか実行されない??

0
0
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0