es6부터 생성
let
, const
var | let | |
---|---|---|
재선언 | o | x |
선언 전, 사용 | o | x |
예시
// var
var name ='Mike';
console.log(name) // "Mike"
var name = 'Jane';
console.log(name) // "Jane"
// let
let name ='Mike';
console.log(name) // 'Mike'
let name = 'Jane';
console.log(name) // error!
var
console.log(name) // undefined
var name ="Mike"
// [동작 원리]
// 호이스팅: name이 최상위로 끌어 올려진 것 처럼 동작.
// undefined 나온 이유: 선언은 호이스팅 됨. 할당은 안됨.
var name
console.log(name); // undefined
name = "Mike"; // 할당
let
console.log(name); // ReferenceError
let name = "Mike";
let
, const
, var
))변수 선언(스코프 내부 어디서든)은 최상위에 선언된 것처럼 행동
발생 범위 : 스코프 단위
예시
let age = 30;
function showAge(){
console.log(age)
}
showAge()
let age = 30;
// 스코프 범위 {
function showAge(){
console.log(age) // TDZ
let age = 20; // let: 호이스팅을 발생 시킴
}
// }
showAge()
let
, const
의미: 모든 코드 블록 내에서 선언된 변수는 코드 블록 내에서만 유효하며, 외부에서는 접근 불가
let
, const
지역 변수: 함수 내에서 선언된 변수
var
예시
// var: if 문 안에서 var로 선언한 변수는 if 문 밖에서도 사용 가능
// let, const: 이렇게 사용x. 중괄호 내부에서만 사용o -> 블록 스코프
const age = 30;
if(age>19){
var txt = "성인"
}
console.log(txt) // "성인"
// var를 함수 내에서 선언 시, 함수 밖에서 사용 불가
function add(num1, num2){
var result = num1 + num2
}
add(2,3)
console.log(result) // ReferenceError: result is not defined
참고