클로저 다시 정리하기

HcKim·2024년 3월 14일
<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>  
  1. fn1() 호출 됐을 때, local scope를 먼저 본다. l1 값이 있기 때문에 console에 이상 없이 찍힌다. fn1()이 local을 봤을 때 l0가 없기 때문에 script로 간다. 있는 l0를 보게 된다. script는 전역적으로 접근이 가능한 스코프라고 보면 된다.

  2. fn2() 호출 했을 때 , Local, Script, Global 모두 없다. l1만 차이가 있는데, 접근할 수 없다.

  3. 어디에서나 호출 했을 때 유효범위가 달라지는 것을 동적 스코프 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>  
  1. fn2() 실행 했을 때, Closure를 볼 수 있으며 클로저 안에 있는 fn1()에 있는 l1을 볼 수 있다. 그래서 오류가 발생하지 않는다.

  2. fn2() 함수가 어디서 정의 됐느냐에 따라 달라진다. 자바스크립트는 정적스코를 채택한다. (= lexical scope)

  1. fn3()을 호출했을 때는 fn2 클로저 , fn1클로저에 있는 값을 볼 수 있다.
profile
Javascript를깨부시자

0개의 댓글