1let work = 0;
2const filterJobs = (jobs, city) => {
3 work++;
4 return jobs.filter((j) => j === city).length;
5};
6const jobs = ["chennai", "pune", "chennai"];
7for (let r = 1; r <= 3; r++) filterJobs(jobs, "chennai");
8console.log("plain: 3 renders →", work, "computations");
9const memo = { deps: null, value: null };
10function useMemo(fn, deps) {
11 if (memo.deps && deps.every((d, i) => d === memo.deps[i])) return memo.value;
12 memo.deps = deps; memo.value = fn();
13 return memo.value;
14}
15work = 0;
16for (let r = 1; r <= 3; r++) useMemo(() => filterJobs(jobs, "chennai"), [jobs, "chennai"]);
17console.log("useMemo: 3 renders →", work, "computation");
18useMemo(() => filterJobs(jobs, "pune"), [jobs, "pune"]);
19console.log("city changed →", work, "computations (recomputed once)");