镖。匿名函数的参数来自哪里?
Dart. Where argument of anonymous function came from?
在下面的示例中有 (num i)
东西,当 makeAddr()
调用时它在哪里获得它的价值?
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);
}
这是一个闭包。当 makeAdder returns 时,它返回一个作用域中已有 addBy 的函数,并且该作用域被冻结。
makeAdder
函数returns函数。函数 it returns 是通过计算函数表达式 (num i) => addBy + i
创建的。
当您计算一个函数 expression 时,您创建了一个函数 value。函数值也称为 closure 因为它包含 ("closes over") 函数体中的所有 "free" 变量——那些没有被函数表达式声明的变量本身
在这种情况下,函数表达式 (num i) => addBy + i
包含自由变量 addBy
。函数 value/closure 知道该变量的含义 - 它是调用 makeAdder
函数表达式的参数。每次调用 makeAdder
都会创建一个新的 addBy
变量,并且每次调用还会创建一个新的闭包来关闭该新变量。
闭包不只是存储变量的值,它引用变量本身。你可以看到如果你的闭包改变了变量的值。
示例:
/// Creates a counter function which returns a new value each call.
///
/// The counter function starts at [start] and increments by [step]
/// each time it is called.
int Function() makeCounter([int start = 1, int step = 1]) {
var value = start - step;
return () => value += step;
}
main() {
var countFrom1 = makeCounter();
var countFast = makeCounter(1, 2);
var countFrom100 = makeCounter(100);
// Prints 1, 2, 3, 4, 5:
for (var i = 0; i < 5; i++) print(countFrom1());
// Prints 1, 3, 5, 7, 9:
for (var i = 0; i < 5; i++) print(countFast());
// Prints 100, 101, 102, 103, 104:
for (var i = 0; i < 5; i++) print(countFrom100());
print(countFrom1()); // Prints 6.
}
在下面的示例中有 (num i)
东西,当 makeAddr()
调用时它在哪里获得它的价值?
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);
}
这是一个闭包。当 makeAdder returns 时,它返回一个作用域中已有 addBy 的函数,并且该作用域被冻结。
makeAdder
函数returns函数。函数 it returns 是通过计算函数表达式 (num i) => addBy + i
创建的。
当您计算一个函数 expression 时,您创建了一个函数 value。函数值也称为 closure 因为它包含 ("closes over") 函数体中的所有 "free" 变量——那些没有被函数表达式声明的变量本身
在这种情况下,函数表达式 (num i) => addBy + i
包含自由变量 addBy
。函数 value/closure 知道该变量的含义 - 它是调用 makeAdder
函数表达式的参数。每次调用 makeAdder
都会创建一个新的 addBy
变量,并且每次调用还会创建一个新的闭包来关闭该新变量。
闭包不只是存储变量的值,它引用变量本身。你可以看到如果你的闭包改变了变量的值。
示例:
/// Creates a counter function which returns a new value each call.
///
/// The counter function starts at [start] and increments by [step]
/// each time it is called.
int Function() makeCounter([int start = 1, int step = 1]) {
var value = start - step;
return () => value += step;
}
main() {
var countFrom1 = makeCounter();
var countFast = makeCounter(1, 2);
var countFrom100 = makeCounter(100);
// Prints 1, 2, 3, 4, 5:
for (var i = 0; i < 5; i++) print(countFrom1());
// Prints 1, 3, 5, 7, 9:
for (var i = 0; i < 5; i++) print(countFast());
// Prints 100, 101, 102, 103, 104:
for (var i = 0; i < 5; i++) print(countFrom100());
print(countFrom1()); // Prints 6.
}