본문 바로가기

자바스크립트-스터디[2021-10-05~완료]

[4주차] 15장 let, const 키워드와 블록 레벨 스코프

15.1 var 키워드 선언 변수 문제점

es5 변수 선언 -> var 키워드

특징

 

1. 변수 중복 선언 허용: 정신없다고

var x, var x~~ var y, var y 중복 선언

2. 함수 레벨 스코프 : 적용안됨, 걍 다 전역 스코프됨

               var 선언 ---> 함수 코드 블록 : 지역 스코프

함수 외부 : var a =20;    /  함수 코드 블록 : var a =10; // var a는 전역변수, 함수내부에서 선언했지만..

 

 

if 문 안에서 var x를 중복선언.. 결과는 if문 안에 있는 값으로 나옴
전역 var i와 for문 블록 var i --> 출력은 가장 마지막for 블록에서 설정한 i값이 출력됐다.

3. 변수 호이스팅

var 키워드로 변수를 선언하면 변수 호이스팅일 일어나서 

스코프의 선두로 끌어올려진다.

변수 선언문 이전 --> 참조 가능, 

할당문 이전 --> 참조 undefined

변수 선언문 이전-->참조 가능할당문 이전-->undefined 

 

변수 선언문 없음. 할당문 있음 -> 에러
할당문 이전에 데이터를.....출력했는데 값이 나오네?
할당문 이전에 데이터를.....출력했는데 값이 나오네?

 

15.2 let 키워드

es6에서 새로운 변수 선언 키워드 let, const 도입함

1. 변수 중복 선언 금지

sysntax 에러 발생함

뭐지 안 발생하네

 

 

d이걸로 하면됨.
동시에 입력해야 already 에러 발생함

 

2. 블록 레벨 스코프

var 키워드 ---> 함수의 코드 블록만 --> 지역 스코프 인정 --> 함수 레벨 스코프 따름

let 키워드 ---> 함수, if문, for문, while문, try-catch 문 --> 지역 스코프 인정 --> 블록 레벨 스코프 따름

블록 레벨 스코프
function, for문도 지역 스코프 됨.

3. 변수 호이스팅

let 은 변수 호이스팅이 발생하지 "않는 것 처럼" 동작

호이스팅이 발생하지 "않는 것 처럼"
var 는 선언단계 + 초기화 단계 = undefined가 한번에 실행됨

 

var 는 선언단계+초기화 단계 = undefined가 한번에 실행됨

let은 선언단계, 초기화 단계가 한번에 실행 안됨.

 

 

4. 전역 객체와 let

var로 선언한 전역 변수는 window(전역객체)의 프로퍼티다. window.foo로 접근이 가능하다.

let로 선언한 지역 변수는 window(전역객체)의 프로퍼티가 아니다. window.foo 처럼 접근 못한다.

 

15.3 const 키워드

1. 선언과 초기화

const 키워드는 상수를 선언하기 위해 사용한다.

선언+초기화를 동시에!!

변수 호이스팅 발생하지 않는 것처럼 동작

2. 재할당 금지

재할당 안됨

 

3. 상수

const 선언한 변수 -->원시 값 할당 --> 변수 값 변경 못함

 

4. const 키워드와 객체

const 선언한 변수 -->객체 할당 --> 변수 값 변경 가능

 

15.4 var, let, const

변수 선언 : const

변수 선언 + 재할당 필요 : let

var는 쓰지말자