1. 오답: setTimeout 실행 할 때 for문 다 돌고나서의 i값
2. 정답: 실행하기 전에 일일이 전달되어 넣어주는 i값
function cs(h)
{
for (var i=0;i<h;i++)
{
setTimeout(function(){
console.log(i);
}, i*1000);
}
}
cs(3);
결과:333
var는 함수스코프라
countSeconds 함수에서 i가 1번 생성되어서
setTimeout에 예약된 function ()이 실행되는 순간에는 이미 최종 i가 찍히게 된다
function cs(h)
{
for (let i=0;i<h;i++)
{
setTimeout(function(){
console.log(i);
}, i*1000);
}
}
cs(3);
결과:012
let은 블럭스코프라
for문 안의 단계마다 i가 블럭 단위마다 따로따로 3번 생성되는 것이다 (딱국님이 알려줌)
따라서 우리가 원하는 결과가 나온다
즉 함수스코프는 for 문에서 i가 1개이지만
블럭스코프는 for 문에서 블럭마다 i가 3개나 되는 놈들이 생기는 것이다
어느 게 절대적이다가 아니라 두가지 다 의미가 있는 것이다
function cs(h)
{
let i;for (i=0;i<h;i++)
{
setTimeout(function(){
console.log(i);
}, i*1000);
}
}
cs(3);
결과:333
let 이 설정된 놈은 for문 밖에 있으니 그 전체 블럭만 관여하는 것이다 즉 생성되는 i의 개수가 1개라는 것이다
i가 블럭이나 함수마다 생성되는 개수로 이해하면 개별적으로 들어갈지 안 들어갈지 명확해지는 것 같다
조까
고멘네..
해당 댓글은 삭제되었습니다.
https://nanikit.github.io/dc-highlighter/
- dc App
고마워 지금 밖이라 다시 들어가면 설정할게!