For a loop that creates one closure per iteration, why does using let versus var change not only correctness but the engine's allocation behavior?const fns = []; for (let i = 0; i < 3; i++) { fns.push(() => i); }