最佳答案
我一直在浏览整个网页,寻找关于延续的启发,令人难以置信的是,最简单的解释怎么会让像我这样的 JavaScript 程序员如此困惑。当大多数文章解释 Scheme 中代码的延续或使用 monads 时,这一点尤其正确。
现在我终于明白了延续的本质,我想知道我所知道的是不是真的。如果我认为的是真的,实际上不是真的,那就是无知,而不是启蒙。
我知道的是:
在几乎所有语言中,函数都会显式地将值(和控件)返回给调用者。例如:
var sum = add(2, 3);
console.log(sum);
function add(x, y) {
return x + y;
}
现在,在使用第一类函数的语言中,我们可以将控件传递给回调函数,并将值返回给调用者,而不是显式返回给调用者:
add(2, 3, function (sum) {
console.log(sum);
});
function add(x, y, cont) {
cont(x + y);
}
因此,我们不再从函数返回值,而是继续使用另一个函数。因此,这个函数被称为第一个函数的延续。
那么,延续和回调之间的区别是什么呢?