Return 条带柯里化技术的语句
Return statements with currying techniques
在使用 FreeCodeCamp 学习时,我遇到了一个关于柯里化的问题。
解决方案是这样的:
function add(x) {
// Add your code below this line
return function(y) {
return function(z) {
return x + y + z;
}
}
}
add(10)(20)(30);
但是,我很困惑为什么这里的 return 语句没有终止函数的执行?
我的印象是,一旦您使用 return 语句,该行就会被执行,超出该行的所有内容都会被忽略。
是的,使用 return
确实结束函数执行,但返回值是一个函数本身,然后直接调用它,执行下一个函数,以 return
另一个函数结束,然后再次直接调用并产生结果。
add(10)(20)(30);
// evaluted to:
function(x) {
return function(y) {
return function(z) {
return x + y + z;
};
};
}(10)(20)(30)
// evaluated to:
function(y) { // x = 10 through closure
return function(z) {
return x + y + z;
};
}(20)(30);
// evaluated to
function(z) { // x = 10, y = 20 through closure
return x + y + z;
}(30)
// evaluated to
60
每次它返回一个新函数时,它都会被执行。
如果一个函数有多个 return 语句,你是对的,但在这种情况下,有多个函数(每个函数都有自己的 return 语句)。其中两个函数恰好 return 另一个函数。
它只结束了自己的功能。返回的函数还没有被调用。
function add(x) {
return function(y) { // \
return function(z) { // |
return x + y + z; // | part of the returned function
}; // |
}; // /
}
add(10)(20)(30);
在使用 FreeCodeCamp 学习时,我遇到了一个关于柯里化的问题。
解决方案是这样的:
function add(x) {
// Add your code below this line
return function(y) {
return function(z) {
return x + y + z;
}
}
}
add(10)(20)(30);
但是,我很困惑为什么这里的 return 语句没有终止函数的执行?
我的印象是,一旦您使用 return 语句,该行就会被执行,超出该行的所有内容都会被忽略。
是的,使用 return
确实结束函数执行,但返回值是一个函数本身,然后直接调用它,执行下一个函数,以 return
另一个函数结束,然后再次直接调用并产生结果。
add(10)(20)(30);
// evaluted to:
function(x) {
return function(y) {
return function(z) {
return x + y + z;
};
};
}(10)(20)(30)
// evaluated to:
function(y) { // x = 10 through closure
return function(z) {
return x + y + z;
};
}(20)(30);
// evaluated to
function(z) { // x = 10, y = 20 through closure
return x + y + z;
}(30)
// evaluated to
60
每次它返回一个新函数时,它都会被执行。
如果一个函数有多个 return 语句,你是对的,但在这种情况下,有多个函数(每个函数都有自己的 return 语句)。其中两个函数恰好 return 另一个函数。
它只结束了自己的功能。返回的函数还没有被调用。
function add(x) {
return function(y) { // \
return function(z) { // |
return x + y + z; // | part of the returned function
}; // |
}; // /
}
add(10)(20)(30);