Implementing lazy evaluation in JavaScript with caching

Caching involves storing the results of a computation so that they can be reused later instead of recalculating them every time they are needed. For lazy evaluation, we can cache the computed values and retrieve them when necessary.

Let’s take a look at an example to understand how lazy evaluation with caching can be implemented in JavaScript:

const lazySum = (a, b) => {
  let sum;

  return () => {
    if (sum === undefined) {
      console.log('Calculating sum...');
      sum = a + b;
    }

    return sum;
  };
};

const sum = lazySum(5, 3);

console.log(sum()); // Output: Calculating sum... 8
console.log(sum()); // Output: 8 (cached result)

In the example above, we define a function lazySum that takes two arguments a and b. Inside lazySum, we declare a variable sum and assign it the value undefined. We then return an anonymous function as the result of lazySum.

Whenever the returned function is called (as sum), it checks if sum is undefined. If it is, it calculates the sum of a and b and assigns the result to sum. If sum is already defined, it simply returns the cached result.

When we call sum() for the first time, it calculates the sum and logs “Calculating sum…” to the console. However, when we call sum() again, it doesn’t recalculate the sum but retrieves and returns the cached result.

Using lazy evaluation with caching can improve performance in scenarios where computations are expensive and need to be done only once. It allows us to avoid unnecessary computations and speed up our code execution.

#JavaScript #LazyEvaluation #Caching