[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에러가 안난다.
c = '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
a = 'test3' // 가능
// const
const b = 'test'
const b = 'test2' // Uncaught SyntaxError: Identifier 'a' has already been declared
b = 'test3' // Uncaught TypeError:Assignment to constant variable.
| cs |
댓글
댓글 쓰기