Javascript 使用currying技术返回语句
在使用FreeCodeCamp学习时,我遇到了一个关于咖喱的问题 解决办法是:Javascript 使用currying技术返回语句,javascript,return,currying,Javascript,Return,Currying,在使用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语句,该行就会被执行,超出该行的所有内容
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
ing另一个函数结束,然后直接再次调用该函数并生成结果
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语句)。其中两个函数恰好返回另一个函数。它只结束自己的函数。尚未调用返回的函数
function add(x) {
return function(y) { // \
return function(z) { // |
return x + y + z; // | part of the returned function
}; // |
}; // /
}
add(10)(20)(30);