javascript-尝试在Dart中关闭包住我的头
作者:互联网
我目前正在学习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分配给addBy 2,将变量add4分配给addBy 4.但是我对此不太了解:在执行带有参数的函数(即add2(3)和add4(3))时,参数不应该分配变量addBy,所以addBy应该分别等于变量3 ? Dart如何知道将i分配给3而不是addBy?
我希望我有道理.
解决方法:
makeAdder使用一个参数(addBy),并返回一个也使用一个参数(i)的函数.
当您调用var add2 = makeAdder(2)时,此处的参数2传递给addBy,该函数返回的lambda值等效于:
num add2(num i) {
return 2 + i;
}
稍后,当您调用add2(3)时,参数3将传递给i.
关键是要了解makeAdder返回带有参数的函数.
标签:closures,dart,javascript 来源: https://codeday.me/bug/20191108/2010219.html