クラスを作るほどでもないけれどデータを保持して欲しい事、ありません?
対象読者
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))
これなら直に使えるし、普通の関数定義と同じ様に扱える。