stale closure

 const something = (value) => {
   const r1 = Math.floor(Math.random() * 100);
 
   const inside = () => {
     const r2 = Math.floor(Math.random() * 100);
     console.log({ r1, r2, value });
   };
 
   return inside;
 };
 
 const first = something("first");
 const second = something("second");
 
 first();
 second();
 first();
 second();
 first();

🡇🡇🡇

 {r1: 12, r2: 22, value: "first"}
 {r1: 78, r2: 45, value: "second"}
 {r1: 12, r2: 11, value: "first"}
 {r1: 78, r2: 40, value: "second"}
 {r1: 12, r2: 80, value: "first"}
  • r1はfirstやsecondが作成された時に決定するので、first()、second()を何度実行しても変化しない

参考

https://codesandbox.io/s/js-stale-closure-m26tdw?file=/index.js


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS

Last-modified: 2023-10-03 (火) 17:33:46