// Closures
//Almost mystical like feature that many developers fail to fully understand.
//We cannot create closures manually like how we create arrays and functions.
//Rather closures happen in certain situations. We just need to recognize
//those situations.
//Example:
const secureBooking = function () {
let passengerCount = 0; //Variable of the secureBooking Function
//returns a function
return function () {
passengerCount++; //Adding to the passengerCount
console.log(passengerCount);
};
};
const book = secureBooking(); //capture that function
book();
//In the above example we have a function called secureBooking
//That function returns another function, which we stored in book variable
//We then call the book() function and it adds to the passengerCount.
//But you may be wondering? How can it add to the passengerCount
//if the secureBooking has finished executing, shouldn't it not exist?
//This works because all functions have access to the variable environment
// in which they were created in. Meaning since secureBooking created
// the function which we stored in book. The book function now has
// access to the variable environment of secureBooking function.