我目前正在学习Google Dart。我目前在试图理解从dart文档中提取的这段代码中发生的事情时感到困惑:
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);
}我发现很难理解的是add2(3)和add(3)部分。我收集的makeAdder(2)和makeAdder(4)在它们自己的作用域中将变量addBy分别赋值为2和4。因此,变量add2将2赋给addBy,变量add4将4赋给addBy。但我不太理解这一点:当使用参数(即add2(3)和add4(3))执行函数时,参数不应该分配变量addBy,因此addBy应该分别等于变量的3吗?Dart如何知道将i赋值为3而不是addBy?
我希望我说的有道理。
发布于 2018-06-28 21:26:41
makeAdder接受一个参数(addBy)并返回一个函数,该函数也接受一个参数(i)。
当您调用var add2 = makeAdder(2)时,此处的参数2被传递给addBy,并且该函数返回一个与以下内容等效的lambda:
num add2(num i) {
return 2 + i;
}稍后,当您调用add2(3)时,参数3将传递给i。
关键是要理解makeAdder返回一个接受参数的函数。
发布于 2018-06-28 21:52:48
makeAdder在这里返回一个函数。从makeAdder返回的函数基本上是一个closer。一旦你用一个参数调用makeAdder,它的值就会保存在addBy参数中。因此,当您执行像makeAdder(2)(3)这样的调用时,它将返回5。
在简单的javascript中,此函数将如下所示-
var makeAdder = function(addBy) {
return (param) => {
return addBy+param;
}
}内部函数只是一个简单的箭头函数。如果我们以makeAdder(5)(6)的形式调用makeAdder,它将返回11
https://stackoverflow.com/questions/51083905
复制相似问题