Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/443.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 试着用飞镖把我的头绕在瓶盖上_Javascript_Dart_Closures - Fatal编程技术网

Javascript 试着用飞镖把我的头绕在瓶盖上

Javascript 试着用飞镖把我的头绕在瓶盖上,javascript,dart,closures,Javascript,Dart,Closures,我目前正在学习谷歌飞镖。我目前在试图理解从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 = makeAd

我目前正在学习谷歌飞镖。我目前在试图理解从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


我希望我说的有道理。

makeAdder
接受一个参数(
addBy
),并返回一个函数,该函数也接受一个参数(
I

调用
var add2=makeAdder(2)
时,此处的参数
2
被传递到
addBy
,函数返回一个lambda,其值等于:

num add2(num i) { 
  return 2 + i;
}
稍后当您调用
add2(3)
时,参数
3
被传递到
i


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

makeAdder在这里返回一个函数。从makeAdder返回的函数基本上是一个更接近的函数。使用参数调用makeAdder后,其值将保留在addBy param中。因此,当您执行类似makeAdder(2)(3)的调用时,它将返回5

在简单javascript中,此函数如下所示-

var makeAdder = function(addBy) {
    return (param) => { 
        return addBy+param;
    }
}

内部函数只是一个简单的箭头函数。如果我们将makeAdder调用为makeAdder(5)(6),它将返回11。我现在明白了。代码块使理解变得非常简单,但如果我希望函数不返回任何内容,该怎么办?例如,
函数makeAdder(num addBy,num addByy){print(addBy.toString()+addByy.toString());}
。然后我写以下内容:
varadd2=makeAdder(2200,2);add2()这不起作用,因为我得到了一个NoSuchMethod例外如果
makeAdder
没有返回任何东西,那么您可能不应该将其分配给变量。您得到一个NoSuchMethod,因为
add2
不是一个函数,因为您为它分配了
makeAdder
,而该函数没有返回任何内容。