Что такое лексический прицел в дротике? - PullRequest
0 голосов
/ 03 марта 2020

В основном я рассматриваю определение функций замыкания, которое гласит -

Функция, на которую можно ссылаться с помощью доступа к переменным в ее лексической области, называется замыканием

Итак, я хочу знать этот термин лексический охват .

1 Ответ

2 голосов
/ 03 марта 2020

Лексическая область действия

лексическая переменная области действия / закрытие и т. Д. c доступен только в пределах блока кода, в котором она определена.

Dart - это лексически ограниченный язык , С лексической областью видимости области потомка получат доступ к самой последней объявленной переменной с тем же именем. Сначала ищется самая внутренняя область видимости, а затем выполняется поиск по внешним областям.

Вы можете «следовать за фигурными скобками наружу», чтобы увидеть, находится ли переменная в области действия.

См. Следующий пример.

main() { //a new scope
  String language = "Dart";

  void outer()  {
    //curly bracket opens a child scope with inherited variables

    String level = 'one';
    String example = "scope";

    void inner() { //another child scope with inherited variables
      //the next 'level' variable has priority over previous
      //named variable in the outer scope with the same named identifier
      Map level = {'count': "Two"};
      //prints example: scope, level:two
      print('example: $example, level: $level');
      //inherited from the outermost scope: main
      print('What Language: $language');
    } //end inner scope

    inner();

    //prints example: scope, level:one
    print('example: $example, level: $level');
  } //end outer scope
  outer();
} //end main scope

Лексические замыкания

Замыкание - это функциональный объект, который имеет доступ к переменным в своей лексической области видимости, даже когда функция используется за пределами его первоначального объема.

 /// Returns a function that adds [addBy] to the
/// function's argument.
Function makeAdder(num addBy) {
  return (num i) => addBy + i;
}

    void main() {
      // Create a function that adds 2.
      var add2 = makeAdder(2);

      // Create a function that adds 4.
      var add4 = makeAdder(4);

      assert(add2(3) == 5);
      assert(add4(3) == 7);
    }

Подробнее о можно прочитать здесь .

...