Return a new value from a function.

pure-update A pure update function returns the next value from its inputs. It does not change outside state, which makes the trace easier to reason about.

Pure Updates

bonus
pure_update.js
Replay: real traced execution (multi-file project)
const bonus = 2;
function addBonus(score, extra) {
  return score + extra;
}

const nextScore = addBonus(20, bonus);
const report = "score=" + nextScore;

console.log("bonus=" + bonus);
console.log("report=" + report);
const bonus = 5;
function addBonus(score, extra) {
  return score + extra;
}

const nextScore = addBonus(20, bonus);
const report = "score=" + nextScore;

console.log("bonus=" + bonus);
console.log("report=" + report);
const bonus = 10;
function addBonus(score, extra) {
  return score + extra;
}

const nextScore = addBonus(20, bonus);
const report = "score=" + nextScore;

console.log("bonus=" + bonus);
console.log("report=" + report);
  1. bonus ← 2

    1const bonus→ 2 = 2; //@bonus=5, 102function addBonus(score, extra) {3  return score + extra;4}56const nextScore = addBonus(20, bonus2);7const report = "score=" + nextScore;
  2. //@bonus=5, 10 function addBonus(score, extra)

    1const bonus = 2; //@bonus=5, 102function addBonus(score20, extra2) {3  return score + extra2;4}
  3. nextScore ← 22, report ← score=22

    3  return score + extra;4}56const nextScore→ 22 = addBonus(20, bonus2);7const report→ score=22 = "score=" + nextScore22;89console.log("bonus=" + bonus2);10console.log("report=" + reportscore=22);
    outputbonus=2
    report=score=22
  1. bonus ← 5

    1const bonus→ 5 = 5;2function addBonus(score, extra) {3  return score + extra;4}56const nextScore = addBonus(20, bonus5);7const report = "score=" + nextScore;
  2. function addBonus(score, extra)

    1const bonus = 5;2function addBonus(score20, extra5) {3  return score + extra5;4}
  3. nextScore ← 25, report ← score=25

    3  return score + extra;4}56const nextScore→ 25 = addBonus(20, bonus5);7const report→ score=25 = "score=" + nextScore25;89console.log("bonus=" + bonus5);10console.log("report=" + reportscore=25);
    outputbonus=5
    report=score=25
  1. bonus ← 10

    1const bonus→ 10 = 10;2function addBonus(score, extra) {3  return score + extra;4}56const nextScore = addBonus(20, bonus10);7const report = "score=" + nextScore;
  2. function addBonus(score, extra)

    1const bonus = 10;2function addBonus(score20, extra10) {3  return score + extra10;4}
  3. nextScore ← 30, report ← score=30

    3  return score + extra;4}56const nextScore→ 30 = addBonus(20, bonus10);7const report→ score=30 = "score=" + nextScore30;89console.log("bonus=" + bonus10);10console.log("report=" + reportscore=30);
    outputbonus=10
    report=score=30