レキシカルスコープ
- コードを書く場所によって参照できる変数が変わるスコープ
- 「静的スコープ」ともいう
- コードを記述した時点で決定するため。
case
- fn1()を実行するとfn2() が実行される。
let a = 2 //グローバルスコープ
function fn1(){
let b = 1;
function fn2(){
let c = 3;
console.log(b)
}
fn2();
}
fn1();
>>> 1
- fn1のスコープから外れたfn2()を実行するとエラーがかえる。
- すなわちfn2から変数bは見えていない。
- つまり、関数を実行する場所によって使用できる変数が変わる。
let a = 2
function fn1(){
let b = 1;
}
function fn2(){
let c = 3;
console.log(b)
}
fn2();
>>> error
まとめ
- スコープは内側から外側へのスコープは取れるが、外側から内側へのスコープは通らない。
イメージはこのような感じ
// windowオブジェクトは最低レイヤーなので全ての関数から参照できる。
let a = 2
function fn1(){
let b = 1;
console.log(a) //参照できる。(内〜外:○)
console.log(c) //fn2の3章はできない(外〜内:×)
function fn2(){
let c = 3;
console.log(a)//参照できる。(内〜外:○)
console.log(b)//参照できる。(内〜外:○)
}
fn2();
}
fn1();