let, const (es6 이후 버전)
var (es6이전 버전, 이제 안 쓰는 것 추천)
var : 한번 선언된 변수를 다시 선언할 수 있다.
var name = '제니';
var name = '래리';
let : 한번 선언된 변수를 다시 선언할 수 없다.
let name = '제니';
let name = '래리';
=> 에러!
var : 선언하기 전에 사용가능...호이스팅 되기 때문
호이스팅(hoisting) : 처음에 자바스크립트가 실행될때 미리 변수와 함수 선언해놓음.
하지만 아래와 같이 선언했을때 에러는 아니지만 name 콘솔에 undefined 찍힘
[실제]
console.log(name);
var name = '래리';
[호이스팅하면서 마치 이런 꼴로 인식됨]
var name; 1. 변수 선언하면서 호이스팅 되면서 초기화로 undefined 넣어줌
console.log(name); 여기서 에러 안나고 undefined가 찍히고
name = '래리'; 2. 여기서 값이 할당됨
let : 에러.
[실제]
console.log(name);
let name = '래리';
[호이스팅하면서 마치 이런 꼴로 인식됨]
let name; 1. 변수선언하면서 호이스팅됨
console.log(name); 2. 아직 초기화 안됐음. 그러니까 에러.
name = '래리';
변수의 생성과정
초기화단계 : undefined를 할당해주는 단계
var 1. 선언 및 초기화 단계 : 변수가 선언되면서 호이스팅하면서 undefined로 초기화되니까
변수에 값을 할당해주기 전에 콘솔로 찍어도 undefined가 들어가 있으니까 에러 안남
2.할당단계
let 1. 선언 단계 : 변수가 선언되면서 호이스팅 함
2. 초기화 단계 : 실제 코드에 도달했을때 됨. var처럼 미리 되는게 아님.
3. 할당단계
const 1. 선언 + 초기화 + 할당
let name;
name = '래리'; O.K
var name;
name = '래리'; O.K
const name;
name = '래리'; 에러. WHY? 선언과 동시에 값을 할당안해서.
const name = '래리'; 이렇게 해야함
스코프(Scope)
var : 함수스코프
- 함수 내에서 선언된 var 변수는 그 함수 내에서만 사용가능하다
- 따라서 function(){ } 외에 if문,while문 등에서는 { } 안에 변수 선언하고 { } 밖에서도 사용가능
let, const : 블록스코프
- 함수,if문,for문,while문 등등 { } 내에서만 사용가능
const age = 30;
if(age > 19) {
var txt = '성인'; // if문 안에서 var로 변수선언
}
console.log(txt); // if문 밖에서 사용 -> var는 가능, let, const였다면 불가능
왜냐면 var는 함수스코프니까 만약에 if문 아니고 함수(function)였다면 불가능
'JAVASCRIPT' 카테고리의 다른 글
자바스크립트(javascript) Object.assign() 객체복제 (0) | 2023.01.23 |
---|---|
자바스크립트(javascript) 생성자 함수 객체생성 (0) | 2023.01.23 |
자바스크립트(javascript) 배열 기초 (0) | 2023.01.22 |
자바스크립트(javascript) 객체 기본 (0) | 2023.01.22 |
자바스크립트 함수선언문, 함수표현식, 화살표함수 비교 (0) | 2023.01.22 |
댓글