text: // Functions can be treated as values
  // Local bindings are re-created every time a function is called
  
  // What happens to local bindings when the function that created them is no longer active?
  
  function wrapValue(n) {
    let local = n; // this explicit local binding isn't actually needed, since parameters are already local bindings
    return () => local;
  }
  
  let wrap1 = wrapValue(1);
  let wrap2 = wrapValue(2);
  
  // Both local bindings can still be accessed
  
  console.log(wrap1());
  console.log(wrap2());
  
  // Local bindings are created anew for every call
  // Different calls can't trample on one another's local bindings
  
  // Closure - being able to reference a specific instance of a local binding in an enclosing scope
  
  function multiplier(factor) {
    return (number) => number * factor;
  }
  
  let twice = multiplier(2); // multiplier called, creating environment in which its factor parameter is bound to 2
  // the function value it returns (stored in twice) remembers this environment
  
  console.log(twice(2)); // So when its called, it multiplies argument by 2
  