Javascript 试着用飞镖把我的头绕在瓶盖上
我目前正在学习谷歌飞镖。我目前在试图理解从dart文档中取出的这段代码中发生了什么时感到困惑: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
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
,而该函数没有返回任何内容。