Home > Mobile >  Can someone explain to me how this code works? Closure in Dart
Can someone explain to me how this code works? Closure in Dart

Time:01-24

I can't understand how the closure works in Dart. Why does BMW stay? This explanation causes my neurons to overheat. A lexical closure is a functional object that has access to variables from its lexical domain. Even if it is used outside of its original scope.

 `void main() {
  var car = makeCar('BMW');
  print(makeCar);
  print(car);
  print(makeCar('Tesla'));
  print(car('Audi'));
  print(car('Nissan'));
  print(car('Toyota'));
 }

 String Function(String) makeCar(String make) {
 var ingane = '4.4';
 return (model) => '$model,$ingane,$make';
 }`

Console

Closure 'makeCar'
Closure 'makeCar_closure'
Closure 'makeCar_closure'
Audi,4.4,BMW
Nissan,4.4,BMW
Toyota,4.4,BMW

CodePudding user response:

Calling car('Audi') is equal to calling (makeCar('BMW'))('Audi');

CodePudding user response:

A lexical closure is a functional object that has access to variables from its lexical domain. Even if it is used outside of its original scope.

in simple english:

String make will stay valid as long as the returned function is not out of scope because the returned function has reference to String make.

In essence, you "inject" information needed for the newly created function. Your car knows that make is "BMW"

  • Related