SOCO
setTimeout 본문
for(let i=0 ; i<6 ; i++){
setTimeout(()=>{}, (i+1)*1000)
}
for(var i=0 ; i<6 ; i++){
setTimeout(() => {}, (i+1)*1000)
}
1.
블럭 안에서 밖으로 접근가능하지만
밖에서 안으로 접근할 수 없음
2.
블럭 안에서 변수에 값을 할당하는 경우
우선 블럭 안에서 선언된 변수(지역변수)를 먼저 찾고
블럭 안에 없으면 그 다음에 블럭 밖에서 선언된 변수(전역변수)를 찾음
3.
for문의 시작에서 i를 선언하는 경우 해당 i는 for 문의 {}에서 선언된 것임.
따라서 for문{} 밖에서는 해당 i를 변경하거나 불러올 수 없지만
{let i=0;
setTimeout( () => {} , (i+1)*1000)}
{i=1;
setTimeout( () => {} , (i+1)*1000)}
{i=2;
setTimeout( () => {} , (i+1)*1000)}
{i=3;
setTimeout( () => {} , (i+1)*1000)}
{i=4;
setTimeout( () => {} , (i+1)*1000)}
{i=5;
setTimeout( () => {} , (i+1)*1000)}
i=6 끝
i=6이 각각 {}에 있는 i를 바꾸지 못함 (왜냐면 let으로 선언했기때문)
for문 안에 있는 {}에서는 해당 i를 불러올 수도 변경할 수도 있음
var로 i를 선언한 경우 for문의 {}에 갇히지 않음
{var i=0;
setTimeout( () => {} , (i+1)*1000)}
{i=1;
setTimeout( () => {} , (i+1)*1000)}
{i=2;
setTimeout( () => {} , (i+1)*1000)}
{i=3;
setTimeout( () => {} , (i+1)*1000)}
{i=4;
setTimeout( () => {} , (i+1)*1000)}
{i=5;
setTimeout( () => {} , (i+1)*1000)}
i=6 끝
i=6이 각각 {}에 있는 i를 바꿈 (왜냐면 var으로 선언했기때문)
따라서 setTimeout내에 있는 함수가 실행될 떄
자기한테서는 i가 선언되지 않았으니 그 다음 {}에서 i를 찾는데 i =6으로 다 바껴있음
setTimeout내에 있는 함수는 비동기고, setTimeout에 있는 초는 그 순간 바로 저장되는 건가
시간은 미리 저장되고 그 저장된 시간이 될 떄 그때 i값에 따라 함수가 실행되는 건가
시간은 팻칭될 때 값에 고정되지만, 함수 안에 i는 팻칭될 때 값이랑 실행될 떄 값이 다른건가