dart 中的词法范围是什么?

B.s*_*uti 4 closures lexical-scope dart flutter

基本上我正在研究闭包函数的定义,它说 -

可以通过访问其词法范围内的变量来引用的函数称为闭包

所以我想知道这个术语的词法范围

Dar*_*ish 9

词汇范围

\n

词法作用域变量/闭包等只能在定义它的代码块内访问。

\n
\n

Dart 是一种词法范围的语言。通过词法作用域,后代作用域将访问最近声明的同名变量。首先搜索最里面的范围,然后通过其他封闭范围向外搜索。

\n
\n

您可以 \xe2\x80\x9c 按照花括号向外 \xe2\x80\x9d 查看变量是否在范围内。

\n

请参阅以下示例。

\n
main() { //a new scope\n  String language = "Dart";\n\n  void outer()  {\n    //curly bracket opens a child scope with inherited variables\n\n    String level = \'one\';\n    String example = "scope";\n\n    void inner() { //another child scope with inherited variables\n      //the next \'level\' variable has priority over previous\n      //named variable in the outer scope with the same named identifier\n      Map level = {\'count\': "Two"};\n      //prints example: scope, level:two\n      print(\'example: $example, level: $level\');\n      //inherited from the outermost scope: main\n      print(\'What Language: $language\');\n    } //end inner scope\n\n    inner();\n\n    //prints example: scope, level:one\n    print(\'example: $example, level: $level\');\n  } //end outer scope\n  outer();\n} //end main scope\n
Run Code Online (Sandbox Code Playgroud)\n

词汇闭包

\n

闭包是一个函数对象,即使该函数在其原始范围之外使用,也可以访问其词法范围内的变量。

\n
 /// Returns a function that adds [addBy] to the\n/// function\'s argument.\nFunction makeAdder(num addBy) {\n  return (num i) => addBy + i;\n}\n\nvoid main() {\n  // Create a function that adds 2.\n  var add2 = makeAdder(2);\n    \n  // Create a function that adds 4.\n  var add4 = makeAdder(4);\n    \n  assert(add2(3) == 5);\n  assert(add4(3) == 7);\n}\n
Run Code Online (Sandbox Code Playgroud)\n

您可以从这里阅读更多内容。

\n