능히 해낼 수 있다

230113 JS: 숙달을 위한 메모 - Variable(변수) 편 본문

개발🌐/JavaScript

230113 JS: 숙달을 위한 메모 - Variable(변수) 편

roni_eo 2023. 1. 13. 23:13
반응형

✍️✍️✍️ 위 글은 작성자의 지식습득에 따라 추후 퇴고 될 수 있음을 알려드립니다(피드백 환영).

 


 

JavaScript에서는 변수를 선언하는 3가지 방법이 있다.

var, const, let 이 있는데,

현 시점으로서는 var를 사용하지 않는다.(정확히는 사용하지 않을 것을 권장한다.)

 

그 이유는 var는 변수 할당 하고 같은 변수이름으로

또 값을 재할당 가능하다는 가장 큰 리스크를 갖고 있기 때문이다.

같은 변수이름에 재할당이 가능하단 소리는 

코드가 오천만줄이 됐을 때 똑같은 이름의 변수에 값이 몇개가 할당 됐을지 모를일이라는 것.

 

더 나아가 의도하지않는 변수 범위내에서 동작할 확률이 높고,

이게 개발자가 눈치채지 못할 수있기때문에 메모리 누수로 이어진다.

(이건 개발 지식이 없는 나도 끔찍한 상황이라는 건 알 것같다..⭐)

 

아무튼 위와 같은 이유로 undefined또는 Error반응을 하는 let과 const로 변수를 선언해 줘야한다.

그리고 var를 사용하는건 소위말하는 '레거시 코드'에 많으니 참고할 것.

 

 


const 

작성방법 : const 이름 = 데이터;

const 특징

1. 블록 레벨 유효범위(Block-level scope) : 단어에 대한 개념은 다른 글에서 만나 뵙겠습니다.

2. 재할당 X

3. 중복 선언 X

4. 호이스팅 X : 단어에 대한 개념은 다른 글에서 만나 뵙겠습니다.

5. 전역 선언시 전역 객체의 속성으로 등록 X

 

예시

function fn() {
  console.log(n) // ReferenceError!
  if (true) {
    //const n = 123 //다시 선언할 수 없음
    n = 456 // TypeError!
    console.log(n) // 123
    const n = 'ABC' // SyntaxError!
  }
  console.log(n) // ReferenceError!
}
fn();

console.log(n) // ReferenceError!

const xyz = 'XYZ'
console.log(window.xyz) // undefined

let 

작성방법 : let 이름 = 데이터;

let 특징

1. 블록 레벨 유효범위(Block-level scope) : 단어에 대한 개념은 다른 글에서 만나 뵙겠습니다.

2. 재할당 O

3. 중복 선언 X

4. 호이스팅 X : 단어에 대한 개념은 다른 글에서 만나 뵙겠습니다.

5. 전역 선언시 전역 객체의 속성으로 등록 X

 

예시

function fn() {
  console.log(nn) // ReferenceError!
  if (true) {
    //let nn = 123
    nn = 456
    console.log(nn) // 456
    let nn = 'ABC' // SyntaxError!
  }
  console.log(nn) // ReferenceError!
}
fn()

console.log(nn) // ReferenceError!

let xyzz = 'XYZ'
console.log(window.xyzz) // undefined
반응형