// 비동기식에 대한 이해...
// 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 |