[JS] var, let, const 정리

[JS] var, let, const 정리

var

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// var는 function-scope이기 때문에 for문이 끝난다음에 i를 호출하면 값이 출력이 잘 된다.
// 이건 var가 hoisting이 되었기 때문이다.
for(var j=0; j<10; j++) {
  console.log('j', j)
}
console.log('after loop j is ', j) // after loop j is 10
// 아래의 경우에는 에러가 발생한다.
function counter () {
  for(var i=0; i<10; i++) {
    console.log('i', i)
  }
}
counter()
console.log('after loop i is', i) // ReferenceError: i is not defined
cs
  • function-scoped
  • 기존의 자바 스크립트는 var를 이용해서 변수를 선언함
    • 다른 프로그래밍 언어는 보통 블럭단위 유효범위를 가지고 있지만 var은 함수에 대해서만 Scope를 가지고 있움

let

1
2
3
4
5
6
7
// 이미 만들어진 변수이름으로 재선언했는데 아무런 문제가 발생하지 않는다.
var a = 'test'
var a = 'test2'
// hoisting으로 인해 ReferenceError에러가 안난다.
= 'test'
var c
cs
  • let 변수명 = 값
  • block-scoped({})
    • let은 블록 단위 scope를 가진다
  • var의 단점을 극복하기 위해서 ES6에서는 새로운 키워드인 let을 추가함
  • 글로벌 let변수는 글로벌 객체의 속성이 아님
    • window.x가 아님
  • for문 등의 루프에서 for( let v ...) 구문에서 v는 루프마다 새로 바인딩함
  • let은 선언 전부터 참조하면 에러
  • 같은 let 변수 선언시 문법에러
    • 해결방법은 ES6의 모듈을 사용하는 것

const

  • block-scoped({})
  • const 상수명 = 값
  • let과 동일하나 다른점은 최초 값 할 당 이후 값 변경이 불가능함
    • 변하지 않는 값을 사용시에는 const를 이용하면 됨
    • 변경하면 문법에러(SyntaxError)발생
  • let은 변수에 재 할당이 가능하지만, const는 변수 재선언, 재할당 모두 불가능
1
2
3
4
5
6
7
8
let a = 'test'
let a = 'test2' // Uncaught SyntaxError: Identifier 'a' has already been declared
= 'test3'     // 가능
// const
const b = 'test'
const b = 'test2' // Uncaught SyntaxError: Identifier 'a' has already been declared
= 'test3'    // Uncaught TypeError:Assignment to constant variable.
cs

댓글

이 블로그의 인기 게시물

[Python] # -*- coding: utf-8 -*-를 쓰는 이유

[소프트웨어공학] NS(Nassi-Schneiderman) 차트

[컴퓨터네트워크] Telnet이란?