[오늘의 이슈] 단순 할당으로 변수 생성이 가능하다는 걸 이제 알았다.

2023. 8. 11. 15:38Trip to JavaScript

나동빈좌의 강의를 듣다가 아래와 같은 예시를 만났다. 

d = new Array(100).fill(0);
function fibo(x) {
  if (x== 1 || x == 2 ) {
    return 1;
  }
  if(d[x] != 0 ) {
    return d[x]
  }
  d[x] = fibo(x - 1) + fibo(x-2)
  return d[x]
}

console.log(fibo(10))

d에 바로 할당을 해주었는데 선언문 없이 코드가 돌아간다는 점이 매우 이상하게 느껴졌다. 

놀랍게도 코드가 돌아간다. 그리고 d는 전역 객체인 window에 바인딩 되어 있다.

정답은 아래와 같다.

https://ko.javascript.info/variables

변수와 할당에 대해서는 기본 내용이라 그냥 넘어가곤 했는데 이런 사실을 몰랐다. 딱히 저렇게 변수 생성할 일이 없기에 이 후 문제를 일으킬 일은 없겠지만 의외의 곳에서 의문이 생겨 한 참을 찾았다. 

 

추가로, 이렇게 할당된 변수는 어떤 선언 규칙을 따를까?

const, let은 전역 객체에 바인딩 되지 않기 때문에 var로 보는 것이 맞겠다.