SOCO

setTimeout 본문

카테고리 없음

setTimeout

ssooda 2021. 6. 11. 15:27

 

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는 팻칭될 때 값이랑 실행될 떄 값이 다른건가