JavaScript Interview Questions
  • JavaScript Interview Questions
  • Contact
  • Introduction
  • Question 1
  • Question 2
  • Question 3
  • Question 4
  • Question 5
  • Question 6
  • Question 7
  • Question 8
  • Question 9
  • Question 10
  • Question 11
  • Question 12
  • Question 13
  • Question 14
  • Question 15
  • Question 16
  • Question 17
  • Question 18
  • Question 19
  • Question 20
  • Question 21
  • Question 22
  • Question 23
  • Question 24
  • Question 25
  • Question 26
  • Question 27
  • Question 28
  • Question 29
  • Question 30
  • Question 31
  • Question 32
  • Question 33
  • Question 34
  • Question 35
  • Question 36
  • Question 37
  • Question 38
  • Question 39
  • Question 40
  • Question 41
  • Question 42
  • Question 43
  • Question 44
  • Question 45
  • Question 46
  • Question 47
  • Question 48
  • Question 49
  • Question 50
  • Question 51
  • Question 52
  • Question 53
  • Question 54
  • Question 55
  • Question 56
  • Question 57
  • Question 58
  • Question 59
  • Question 60
  • Question 61
  • Question 62
  • Question 63
  • Question 64
  • Question 65
  • Question 66
  • Question 67
  • Question 68
  • Question 69
  • Question 70
  • Question 71
  • Question 72
  • Question 73
  • Question 74
  • Question 75
  • Question 76
  • Question 77
  • Question 78
  • Question 79
  • Question 80
  • Question 81
  • Question 82
  • Question 83
  • Question 84
  • Question 85
  • Question 86
  • Question 87
  • Question 88
  • Question 89
  • Question 90
  • Question 91
  • Question 92
  • Question 93
  • Question 94
  • Question 95
  • Question 96
  • Question 97
  • Question 98
  • Question 99
  • Question 100
  • Epilogue
Powered by GitBook
On this page
  • Question
  • Answer

Question 35

Question

How would you use generators to create a custom iterator?

Answer

Generators are perfect for writing custom iterators in JavaScript.

Here's how you would use them to build your own iterator:

function* fibonacci() {
  let a = 0;
  let b = 1;
  while (true) { // Infinite loop
    yield a;          // Yield the current Fibonacci number
    [a, b] = [b, a + b]; // Update for the next iteration
  }
}

const fibGenerator = fibonacci();

console.log(fibGenerator.next()); // Output: { value: 0, done: false }
console.log(fibGenerator.next()); // Output: { value: 1, done: false }
console.log(fibGenerator.next()); // Output: { value: 1, done: false }
console.log(fibGenerator.next()); // Output: { value: 2, done: false }
// ... and so on

Explanation:

  1. function* fibonacci(): The key is using function*. This declares a generator function.

  2. Variables: We initialize variables a and b to start the Fibonacci sequence (0 and 1).

  3. while (true) Loop: Generates an infinite loop for continuous Fibonacci numbers.

  4. yield a;: The yield keyword pauses execution and "yields" the current value of a. When you call next() on the generator, it resumes from this point, giving you the yielded value.

  5. [a, b] = [b, a + b];: Updates a and b for the next Fibonacci number in the sequence.

Using the Generator:

  • Create an instance of your generator: const fibGenerator = fibonacci();.

  • Call next() repeatedly to get each value from the sequence.

    • next() returns an object with value (the yielded number) and done (true when the sequence is exhausted).

Benefits:

  • Memory Efficiency: Generators don't calculate all Fibonacci numbers at once; they generate them on demand, saving memory.

  • Readability: The code clearly shows the logic for generating the sequence.

  • Lazy Evaluation: Values are produced only when needed.

PreviousQuestion 34NextQuestion 36

Last updated 9 months ago