Functions and Scope
Lexical Scope
Read an outer variable from inside a function.
lexical-scope
A function can read variables from the scope where it is defined. Here `addBase` uses the outer `base` every time it runs.
Lexical Scope
lexical_scope.js
Replay: real traced execution (multi-file project)
const base = 10;
function addBase(x) {
return base + x;
}
const r1 = addBase(5);
const r2 = addBase(8);
console.log("r1=" + r1);
console.log("r2=" + r2);
const base = 5;
function addBase(x) {
return base + x;
}
const r1 = addBase(5);
const r2 = addBase(8);
console.log("r1=" + r1);
console.log("r2=" + r2);
const base = 20;
function addBase(x) {
return base + x;
}
const r1 = addBase(5);
const r2 = addBase(8);
console.log("r1=" + r1);
console.log("r2=" + r2);
base ← 10
1const base→ 10 = 10; //@base=5, 2023function addBase(x) {4 return base + x;5}67const r1 = addBase(5);8const r2 = addBase(8);//@base=5, 20 function addBase(x)
pass 1 of 21const base = 10; //@base=5, 2023function addBase(x5) {4 return base + x5;5}r1 ← 15
4 return base + x;5}67const r1→ 15 = addBase(5);8const r2 = addBase(8);//@base=5, 20 function addBase(x)
pass 2 of 21const base = 10; //@base=5, 2023function addBase(x8) {4 return base + x8;5}r2 ← 18
7const r1 = addBase(5);8const r2→ 18 = addBase(8);910console.log("r1=" + r115);11console.log("r2=" + r218);outputr1=15 r2=18
base ← 5
1const base→ 5 = 5;23function addBase(x) {4 return base + x;5}67const r1 = addBase(5);8const r2 = addBase(8);function addBase(x)
pass 1 of 21const base = 5;23function addBase(x5) {4 return base + x5;5}r1 ← 10
4 return base + x;5}67const r1→ 10 = addBase(5);8const r2 = addBase(8);function addBase(x)
pass 2 of 21const base = 5;23function addBase(x8) {4 return base + x8;5}r2 ← 13
7const r1 = addBase(5);8const r2→ 13 = addBase(8);910console.log("r1=" + r110);11console.log("r2=" + r213);outputr1=10 r2=13
base ← 20
1const base→ 20 = 20;23function addBase(x) {4 return base + x;5}67const r1 = addBase(5);8const r2 = addBase(8);function addBase(x)
pass 1 of 21const base = 20;23function addBase(x5) {4 return base + x5;5}r1 ← 25
4 return base + x;5}67const r1→ 25 = addBase(5);8const r2 = addBase(8);function addBase(x)
pass 2 of 21const base = 20;23function addBase(x8) {4 return base + x8;5}r2 ← 28
7const r1 = addBase(5);8const r2→ 28 = addBase(8);910console.log("r1=" + r125);11console.log("r2=" + r228);outputr1=25 r2=28