てけもぐ Tech 忘備録

クラスを作るほどでもないけれどデータを保持して欲しい事、ありません?

対象読者

javascript 初学者

解決すること

クラスを使わず、データを保持する関数で対応する方法

内容

javascript を使っていれば、クロージャは聞いたことがあるかと。

const gen_a_fn = (init) => {
    let value = init
    return (num) => value += num
})

const a_fn = gen_a_fn(1)
console.log(a_fn(3))  // 4
console.log(a_fn(5))  // 9

こんなやつ。中の value を内部の関数が参照していて実行が終わっても保持してくれる。

でも、最初に関数を作成する const a_fn= gen_a_fn(1) って、やりたくない時が結構あったりします。

例えば上の例でも、最初の a_fn(3) の引数を使えばいいだけで単に関数を作るためだけにやるの嫌だ!って時とか。a_fn()はループの中で使うのに、初期化の段で const a_fn = gen_a_fn(1) ってやると、この初期化が離れていると発見しにくくなったりして。

そんな時は即時関数。

const a_fn = (() => {
    let value = 1
    return (num) => value += num
})()

console.log(a_fn(3))
console.log(a_fn(5))

これなら直に使えるし、普通の関数定義と同じ様に扱える。