Javascriptのクロージャについて
· 約2分
クロージャはJavascriptの囲まれた関数とその周囲のレキシカル環境です。 クロージャは関数にその外側のスコープにアクセスする機能を提供します。
クロージャを使うことで、プライベートのステートを隠すことができる 非同期のコードのステートを保持できる
よく使う場所は、Function Factories Callback、Eventハンドラー、Moduleパータンではクロージャはよく使える。
プライベートの環境を関数に提供できます。
ユースケース
実はLodash関数は大量にクロージャを使っています。
memorize
function memorize(func) {
const cache = new Map();
return function (...args) {
const key = args[0];
if (cache.has(key)) {
return cache.get(key);
}
const result = func.apply(this, args);
cache.set(key, result);
return result;
}
}
function useState(init: string) {
let value = init;
function setValue(newValue: string) {
let value = newValue;
}
return [value, setValue]
}
function useEffect(func, dependency) {
const executed = new Map();
if (executed[dependency.join(',')]) {
return ;
} else {
executed[dependency.join(',')] = true;
func();
}
return ;
}
function executeUseEffect() {
let a = 1, b = 2;
useEffect(() {
console.log(a + b)
}, [a, b]);
useEffect(() {
console.log(a + b)
}, [a, b]);
b = 3;
useEffect(() {
console.log(a + b)
}, [a, b]);
}