Lexical Closures

Closure - where a func can modify vars in the parent scope

var i = 0;

Function func = () => i++;

READ CAREFULLY

void main() {  

  Function func1 = () {
    var a = 1;
    
    Function func2 = () => ++a;
    
    return func2;
  };
  
  Function func3 = func1();
  print(func3()); // 2
  Function func4 = func1();
  print(func3()); // 3
  print(func4()); // 2
}

// func4 is a new object so it references a new parent scope