본문 바로가기

JavaScript/DAY 35 _ 23.10.12

closure function2

        // 비동기식에 대한 이해...

 

        // Q. 2초 안녕하세요 2초 안녕하세요 -> 아니야!!!!

  // 2초 후에 9개가 주르륵 나온다....
        for(i = 1 ; i < 10 ; i++){
            setTimeout(() => {
                console.log("왜 2초뒤에 9개가 한번에 찍힐까?");
                console.log(i);
            }, 2000);
        }

        console.log("전역변수 i의 값");
        console.log(i);
        // 출력 : 왜 2초뒤에 9개가 한번에 찍힐까?, 10 --> 세트 9개가 한번에 찍힌다....

 


        // Q. 그럼 123..9가 찍히게 하려면 어떻게 해야할까?

        function test1(a){

            // a를 매개변수로 받는 함수를 리턴해보자
            return () => {
                console.log(a); // 이 a가 클로져가 되는거지머......
            };
        }

        for(x = 1 ; x < 10 ; x++){ 
            setTimeout(test1(x) , 2000);
        }

 

       // 전역변수와 let에 대해서

        console.log("GPT가 알려줌")

        for(let y = 1 ; y < 10 ; y++){
            setTimeout(() => {
                console.log("이제 각각 5초 뒤에 출력됩니다.");
                console.log(y);
            }, 5000);
        }
        // console.log(y); ---> y is not defined 와ㅋㅋㅋㅋㅋㅋ

@@ let 키워드를 사용하여 i를 선언?
        // --> i는 각 반복에서 새로운 변수로 취급됩니다. 
        // --> 따라서 각 setTimeout 호출에서 i의 값이 고정됩니다. 
        // --> 이렇게 하면 각 console.log(i)에서 예상대로 각 숫자가 2초 간격으로 출력됩니다.

        // Q. i는 뭐야그럼
        // let 없이 i를 사용하면 i는 전역 변수로 처리되며, 반복문 외부에서도 i의 값이 유지됩니다. 
        // 따라서 반복문이 종료된 후에도 i의 값은 10이 됩니다.
        // let을 사용하면 블록 스코프 변수가 생성되어 해당 블록 내에서만 유효하며 전역 변수와는 별개로 처리됩니다. 
        // 그래서 반복문 내에서 let을 사용한 경우 각 반복에서 i의 값이 고정되고, 반복문 외부에서는 영향을 주지 않습니다.

'JavaScript > DAY 35 _ 23.10.12' 카테고리의 다른 글

Class★  (0) 2023.10.12
Class basic, prototype  (0) 2023.10.12
JSON  (0) 2023.10.12
closure function  (0) 2023.10.12
return  (0) 2023.10.12