코드스피츠73 part2

흐름제어

LABEL, BREAK, CONTINUE

LABEL은 변수의 식별자와 같다.

레이블 레인지가 가르치는 곳으로 갈수있다.

레이블을 주석 형태로도 쓸수 있다.


const con = document.getElementById("log");

const log = (...args) => con.innerHTML += '<br/>' + args.join(' ');

abc:() => {
    
    abc:{
        
    }
}


레이블 점프


const con = document.getElementById("log");

const log = (...args) => con.innerHTML += '<br/>' + args.join(' ');

for(const i of [1,2,3,4]){
    // 레이블 이름을 정하지 않아도 점프가 가능 자동으로 레이블을 만듬
    if(i === 3) break;
    log(i);
}

//에러가 나옴 레이블을 명시하지 않아서
abc: {
    log('a');
    break;
    log('b');
}
log('c');

// 에러가 안됨 현대에 언어에는 아래로만 점프가 가능
abc: {
    log('a');
    break abc;
    log('b');
}
log('c');

function scope

클로저에 대한 설명

const con = document.getElementById("log");
const log = (...args) => con.innerHTML += '<br/>' + args.join(' ');
//자유변수
let a = 3;
// a 자유변수에 대한 클로저
const  f = () => {
    // 쉐도잉
    let a = 5;
    log(a);  
};

레이블 스코프

const con = document.getElementById("log");
const log = (...args) => con.innerHTML += '<br/>' + args.join(' ');

k1:{
    let a = 3;
    const  f = () => {
        let a = 5;
        k:{
            //레이블 스코프 찾을수 없다 에러가 남
            break k1;
            log(37);
        }
        log(a);
    };
    f();
}

switch 문

const con = document.getElementById("log");
const log = (...args) => con.innerHTML += '<br/>' + args.join(' ');
// 스위치 문에 블럭은 꼭 선언해야 된다.
// 스위치 문에는 특수 레이블을 사용한다.
// 스위치 문에서 익명 레이블을 만들어준다
// 스위치 문에 레이블도 선언해서 쓸수 있다.

let a = 3, b= 0;

// 값이 복잡한 경우
switch (a) {
    case b++: log('a',b);break;
    case b++: log('b',b);break;
    case b++: log('c',b);break;
    case b++: log('d',b);break;
    default: log('e',b);break;           
}

// 조건이 복잡한 경우
switch (true) {
    case a>5: log('a',b);break;
    case a>4: log('b',b);break;
    case a>3: log('c',b);break;
    case a>2: log('d',b);break;
    default: log('e',b);break;           
}

스위치 문에는 반드시 default가 있다.

if문

a:const  c = 3;
if() 옵션널
if() 
else 필수


a:const  c = 3;
if( c === 1){
    
} else if (c === 2){
    
} else if (c === 3){
    
}else{
    
}

else if문은 없다. else 후방 결합을 사용하지 말아라

병렬 조건을 사용할때 else if를 사용하지말아라

1차 조건이 분기한 이후에 부분집합에 분기가 필요할때만 사용해라


a:const  c = 3;
if( c === 1){
    
} else {
    if (c === 2){
        
    } else {
        if (c === 3){
               
        }else{
            
        }    
    }
}  

else 문 후방결합에 따라서 아래 방식대로 사용가능하다.


a:const  c = 3;
if( c === 1){
    
} else for(;;;) {
    
} else switch (){
    
} else {
    
}

코드의 부수효과 else를 제거 하면서 필수 조건이 빠지면 안된다. else를 사용하면 필수로 가는것을 추천하라


a:const  c = 3;
if( c === 1){
    
} else {
    if (c === 2){
        
    } else {
        if (c === 3){
               
        }    
    }
}  

for 문

for문에 첫번째 인자만 식과 선언문이 들어 올수 있다.


const con = document.getElementById("log");
const log = (...args) => con.innerHTML += '<br/>' + args.join(' ');

var a = 3;

// for(선언문 또는 식 또는 공문; truthy ; for문에 맨마지막에 실행된다.){
    
 '', false, 0, undefined, null, NaN, // falsy 값   

// }

// 무한 루프 가운데 값을 공문으로 채우면 truthy로 판단함 예외사항
for(; ; ){
    
}

// 에러가 남 
while (){
    
}

// 한번은 먼저 실행해야 되는경우에 많이 사용
do {
    
}while ()

쉬운 문장


var a = -1;

while (a > 2){
    a++;
}


do {
    
}while (truthy);

do a++; while (a);

아래의 코드는 배재함


while (act.method().c){
    other.action();
}


이런식으로 보이게 만들어라


var a = act.method().c;
while (a){
    other.action();
    a = act.method().c;
}


아래 처럼 테스트 코드 작성 하기 편함


var a = act.method().c;
while (a) {
    let r  = other.action();
    a = act.method().c;
    if(r === 'abc') a = false;
}

어렵다. 오늘도…

참조