레이블은 흐름 제어를 하는 방법 중 하나이다.
레이블은 파싱 중에 에러를 검사하기 때문에 런타임 시에 흐름 제어하는 if 보다 안전하다.
따라서 함수나 if구문 말고 lable을 활용하기도 한다.
label :
statement
레이블을 명확하게 동작하려면(즉, range를 결정하는 방법은 )
스코프를 선언
, iterator
, switch
를 써서 제어해야 할 수 있다.
for(let i=0;i <10;i++){
if(i==5) break;
}
이와 같은 경우에 실제로 자바스크립트의 엔진에 의해서
p34:
for(let i=0;i <10;i++){
if(i==5) break p34;
}
iterator나 switch을 통해 Auto Label이 생긴다.
이를 undefined Named Label
이라고 한다.
p34:
for(let i=0;i <10;i++){
if(i==5) break p34;
}
console.log("end");//주석1
console.log("000000000000000000000000");//주석1
console.log("00000000000000000000000000000000");//주석3
이럴 경우 주석을 읽기 힘들다.
p34:
for(let i=0;i <10;i++){
if(i==5) break p34;
}
a:console.log("end");//주석1
b:console.log("000000000000000000000000");//주석1
c:console.log("00000000000000000000000000000000");//주석3
병행 레이블을 효과 없기 때문에 이렇게 주석으로 사용 하기도 한다.
특별한 동적인 label을 만들어준다. 따라서 런타임 중에 해석된다.
switch는 case와 default 레이블만 쓸수 있도록 한다.
이를 자바스크립트의 엔진의 해석을 돕기 위해서 이다.
var a=1
p17:
switch(a){
default: console.log("c");
case a: console.log("a") break p17;
case false: console.log("b");
}
값에 대한 평가를 기준으로 lable을 작동한다. a
라는 값에 대해서 흐름을 제어해준다.
switch(true){
case network(): console.log("a") break p17;
case localCache(): console.log("b");
default: //안내문
}
책임을 연쇄적으로 전가 시킨 경우, 값을 무력화 시킨다음 함수의 반환 값에 따라 label처리를 하도록 한다.