<script>
let l0= 'l0'
function fn2(){
let l2 = 'l2'
console.log(l0,l1,l2)
}
function fn1(){
let l1 = 'l1'
console.log(l0,l1)
fn2()
}
fn1()
</script>
fn1() 호출 됐을 때, local scope를 먼저 본다. l1 값이 있기 때문에 console에 이상 없이 찍힌다. fn1()이 local을 봤을 때 l0가 없기 때문에 script로 간다. 있는 l0를 보게 된다. script는 전역적으로 접근이 가능한 스코프라고 보면 된다.
fn2() 호출 했을 때 , Local, Script, Global 모두 없다. l1만 차이가 있는데, 접근할 수 없다.
어디에서나 호출 했을 때 유효범위가 달라지는 것을 동적 스코프 dynamic scope라고 한다.
<=> 자바스크립트는 정적스코프를 채택하고 있다.
<script>
let l0= 'l0'
function fn1(){
function fn2(){
let l2 = 'l2'
console.log(l0,l1,l2)
}
let l1 = 'l1'
console.log(l0,l1)
fn2()
}
fn1()
</script>
fn2() 실행 했을 때, Closure를 볼 수 있으며 클로저 안에 있는 fn1()에 있는 l1을 볼 수 있다. 그래서 오류가 발생하지 않는다.
fn2() 함수가 어디서 정의 됐느냐에 따라 달라진다. 자바스크립트는 정적스코를 채택한다. (= lexical scope)
