首页 > 解决方案 > 试图绕过 Dart 中的闭包

问题描述

我目前正在学习 Google 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?

我希望我说得通。

标签: javascriptdartclosures

解决方案


makeAdder接受一个参数 ( addBy) 并返回一个也接受一个参数 ( i) 的函数。

当你调用var add2 = makeAdder(2)时,这里的参数2被传递给addBy,函数返回一个等价于:

num add2(num i) { 
  return 2 + i;
}

稍后当您调用时add2(3),参数3将传递给i.

关键是要理解makeAdder返回一个带参数的函数。


推荐阅读