基本上,我要遍历闭包函数的定义-
可以通过访问以下变量来引用的函数 它的词汇范围称为闭包
所以我想知道这个术语词法范围。
答案 0 :(得分:3)
词法范围变量/闭包等只能在定义它的代码块内访问。
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);
}
您可以从here阅读更多内容。