В чем разница между продолжением и обратным вызовом?

Я просматривал всю сеть в поисках просвещения о продолжениях, и это ошеломляет, как простейшие объяснения могут так сильно запутать программиста JavaScript, как я. Это особенно верно, когда большинство статей объясняют продолжения с помощью кода в Scheme или используют монады.

Теперь, когда я наконец-то понял, что понял суть продолжений, я хотел узнать, действительно ли то, что я знаю, является правдой. Если то, что я считаю правдой, на самом деле не так, то это невежество, а не просветление.

Итак, вот что я знаю:

Почти во всех языках функции явно возвращают значения (и контролируют) их вызывающей стороне. Например:

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);
}

Таким образом, вместо возврата значения из функции мы продолжаем с другой функцией. Поэтому эта функция называется продолжением первой.

Так в чем же разница между продолжением и обратным вызовом?

Ответы на вопрос(3)

Ваш ответ на вопрос