[코드스피츠] ES6+ 기초편 2

sangeun·2020년 1월 7일
0

코드스피츠

목록 보기
2/3

흐름에 따른 레코드의 종류

식은 하나의 값으로, 일반 문은 실행 단위(레코드)로 등록되고 flow를 따른다.

flow control를 할 수 있는 문들을 이용하면, 레코드를 선택하거나 레코드를 순환할 수 있게 된다. 이런 문들을 completion record로 바뀐다.

직접 flow control

label

문이 아니라 record에 달아주는 태그같은 것이므로 자체로는 문, 레코드가 될 수 없고 별다른 문이 없으면 에러가 난다.
레이블의 이름은 같은 스코프에 두개 등장할 수 없고 이는 컴파일 타임에 에러가 잡힌다.

스코프

스코프의 종류: 블록 스코프, 함수 스코프

label 스코프를 만들 수 있다. a:{}는 중문과는 또 다르다.
같은 함수 스코프 내에는 똑같은 이름의 레이블을 선언할 수 없다. 하지만 레이블 스코프 내에는 같은 이름의 레이블을 또 만들 수 있다.

스코프 범위

일반적으로 레이블 스코프가 지정되지 않을 경우 다른 lablel이 등장하기 전 까지
auto label일 경우 레이블 스코프가 자동적으로 지정된다. iteration, switch위에 label을 작성하게 되면 그 문이 끝날 때까지로 레이블이 자동적으로 한정된다.

특정한 경우, label안에서는 그걸 빠져나오기 위한 flow control이 가능해지고(위로 이동하는 것은 불가능), break, 루프의 경우 switch도 가능해진다.

  • label 스코프를 선언한다.
  • iteration label이 된다.
  • switch label이 된다.

for문에서 어떻게 break를 사용할 수 있는가?

보통 label문에서는 break 뒤에 label이름을 적는데, for문 위에 auto label이 생성되고, break를 쓰면 뒤에 자동으로 break "auto label name"이 되어 작동한다.

switch

구성요소

switch + (식) + {}
하지만 if문이나 for문 뒤의 중괄호는 단문이 나와도 되어서 생략될 수 있었던 반면, switch문의 중괄호는 생략되면 안된다.
이유: switch문 중괄호는 special label block을 만들어주는 역할을 하기 때문이다. 이를 통해 컴파일 타임에 해석되는 정적인 레이블을 만드는 것이 아니라, 동적으로 해석할 수 있는 케이스 레이블을 사용할 수 있다.

case label 평가방식

자바에서는 switch문이 나오면 케이스와 문에 대한 맵을 생성하여서 default문을 앞에 두어도 해당되는 케이스만 수행된다. -> case label에 식이 들어가면 안 된다.
반면 자바스크립트는 case label에 식이 들어가도 런타임으로 평가가 가능하다.

평가방식

값에 대한 평가, 값을 true를 통해 무력화시키고 case를 통해 평가(책임 연쇄 패턴)

profile
꾸준히

0개의 댓글