Today I Learned (TIL)

임효진·2025년 3월 17일

switch 문

: 조건에 따라 프로그램 흐름 나눠서 특정 코드 실행

switch( /*비교할 값*/ ){
    case /*값1*/:
        /*비교할 값이 값1인 경우 실행될 코드*/
        break;
    case /*값2*/:
        /*비교할 값이 값2인 경우 실행될 코드*/
        break;

    /*
    ... 여러개의 case
    */

    default:
        /*비교할 값이 위의 모든 값과 다른 경우 실행될 코드*/
        break;
}

break 구문이 swich-case 문의 마지막 중괄호 밖으로 나오게 함


처음에 case 1,3,5: 이런식으로 작성했을 때 안 되는 것을 보고 찾아서 해결해냄

while 문

: 조건에 따라 프로그램 일정 코드를 반복적으로 수행할 수 있도록 함

while( /*조건식*/ ){
    /* 반복 실행될 코드 */
}

continue : 남은 반복실행 될 코드 모두 건너 뜀
break: 반복문 탈출

do while문

: 한 번 코드 실행되고 이후에 반복실행할지 말지 결정함

do{
    /* 반복 실행될 코드 */
}while( /*조건식*/ );

do 구문을 먼저 쓰고 다음에 while 작성하여 반복문 실행


do{
		var ans= parseInt(prompt("1+1=?"));
   } while(ans!=2);
   
console.log("맞춤");

for문

: 초기구문, 업데이트구문, 반복조건을 한 구문에 합친 반복문


// while 문
var sum = 0;
var i = 0; //초기 설정 코드
while( i < 5 /*조건식*/ ){
    sum = sum + i;
    i++; // 업데이트 코드
}

//for문 -> 더 간결함

var sum = 0;
for( var i = 0 ; i < 5 ; i++ ){
    sum = sum + i;
}

주의해야할 점 : 반복실행 될 코드는 조건이 만족하지 않으면 한 번도 실행 안되지만
초기화 코드는 항상 실행됨

?뭔가 비슷하면서 다르니까 헷갈림..
for문에서 continue를 만나면 update구문(i++)으로 이동해서 업데이트 한 후 조건식 검사함
while문에서 continue를 만나면 반복실행 코드 끝으로 이동해 바로 조건식 검사함

for in 문

: 객체의 각 엘리먼트에 접근할 수 있는 반복문

Object.keys(obj) : 객체를 인자로 받아서 객체의 속성들을 인자로 반환

for( var propertyName in obj ){
    console.log( "\t", propertyName, ": ", obj[propertyName] );
}

따로 초기화코드나 업데이트 코드 존재하지 않지만
obj안에 propertyName를 하나씩 반복해서 넣음

for in 구문 외 in : 연산자로 동작 (해당 속성의 이름이 객체에 존재하는지 검사함 T/F)

변수의 scope

: 선언한 변수가 유효한 영역

function a(){
		var v_a="a";
        function b(){
			var v_b="b";
			console.log("o: ",typeof(v),typeof(v_a),typeof(v_b));
    }
    console.log("o: ",typeof(v),typeof(v_a),typeof(v_b));

}
var v="v";

console.log("o: ",typeof(v),typeof(v_a),typeof(v_b));



> b:string string string
> a: string string undefined
> o :string undefined undefined

변수의 scope 는 function의 scope를 따른다
(객체는 선언된 함수 안에서만 접근이 가능함)

변수의 shadowing

: 함수 안에서 밖에서도 선언된 같은 이름의 변수를 사용하는 경우

<함수 안에서 밖에서도 선언되었던 같은 이름의 변수 사용한 경우>

  • 함수 밖 변수는 잠깐 가려짐 (shadowing)
  • 함수 안에서는 해당 함수에서의 변수로 사용됨
    -함수에서 빠져나오면 다시 해당 변수에 접근 가능

<함수 안에서만 같은 값이 유지되어야하는 경우>

  • 함수 안에서 var 키워드를 사용해 선언하고 사용

<여러 함수에서 값이 유지되면서 사용되는 변수인 경우>

  • 함수를 포괄하는 곳에서 선언하고 사용


? 변수 i를 shadowing 효과 줘야 한다는 것은 감으로 이해했는데 자세히는 이해하지 못한것같다. 왜 i=0 으로 변수를 초기화해야하는 거지

method, this

함수 역시 객체의 속성이 될 수 있음

function f(){
		console.log(this);
		console.log("f is called");
}
var o={name:"object",method:f};

//f함수를 바로 불러올 수 있음
f();
o.method();

this (예약어)
함수 f가 불렸을때 어떤 객체의 파일들의 속성으로 불렸는지 알게해줌
-> 일반적인 함수를 호출할때 브라우저인 경우 window 객체에 바인딩 됨
-> 객체 메소드로써 호출할 때는 object가 출력됨

closure(클로저)

: 함수와 함수가 선언될 때의 environment 로 구성됨

function makeCounterFunction(initVal){
    var count = initVal;
    function Increase(){
        count++;
        console.log(count);
    }
    return Increase;
}

var counter1 = makeCounterFunction(0);
var counter2 = makeCounterFunction(10);

함수가 하나인 것 처럼 보이는데 Increase 함수가 실행될 때마다 count값이 1이었다가 10 이었다 함

makeCounterFunction(0); 호출 했을 때 increase함수가 만들어지면서
closure가 가리키는 함수
: function Increase(){}

closure의 environment
: var count = 0;

makeCounterFunction(10);
closure가 가리키는 함수
: function Increase(){}

closure의 environment
: var count = 10;

count 1, count2 변수 값을 바깥에서 직접 제어할 수는 없음

? 너무 어려운데 강의 내용이 짧아서 더 이해하기 힘들엇다..

평균값 문제

왜 틀렸는지 잘 모르겠다
double answer = 0;
return answer; 을 어떻게 사용해야할 지 모르겠고 size_t 변수도 언제 어디에 사용할 지 모르겠다.
아직 난 코딩이랑 멀리 떨어져있는것 같다....

완강인증

profile
뫗팅

0개의 댓글