Small Grey Outline Pointer let๊ณผ var์˜ ์ฐจ์ด
๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Dev./JavaScript

let๊ณผ var์˜ ์ฐจ์ด

by sso. 2023. 7. 17.

let ๊ณผ var์˜ ์ฐจ์ด

 

let

 for(let i =0; i<winBalls.length; i++){
    setTimeout(()=>{
    console.log(winBalls[i], i);
        addBall(winBalls[i] ,$result);
    }, (i+1)*1000);
}

 

์ˆœ์„œ๋Œ€๋กœ ๋‚˜์˜จ๋‹ค

 

var

for(var i =0; i<winBalls.length; i++){
    setTimeout(()=>{
    	console.log(winBalls[i], i);
        addBall(winBalls[i] ,$result);
    }, (i+1)*1000);
}

๊ณต์ด 1๋ฒˆ์งธ๋ถ€ํ„ฐ ์ˆœ์„œ๋Œ€๋กœ ๋‚˜์˜ค์ง€ ์•Š๊ณ , undefined ๋‚˜์˜ด

 

๐Ÿ“Œvar๋Š” ํ•จ์ˆ˜ ์Šค์ฝ”ํ”„, let์€ ๋ธ”๋ก ์Šค์ฝ”ํ”„๋ฅผ ๊ฐ€์ง„๋‹ค

 

 

a๋Š” ํ•จ์ˆ˜ ์•ˆ์— ์„ ์–ธ๋œ ๋ณ€์ˆ˜์ด๋ฏ€๋กœ ํ•จ์ˆ˜ ๋ฐ”๊นฅ์—์„œ๋Š” ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค

ํ•จ์ˆ˜๋ฅผ ๊ฒฝ๊ณ„๋กœ ์ ‘๊ทผ ์—ฌ๋ถ€๊ฐ€ ๋‹ฌ๋ผ์ง€๋Š” ๊ฒƒ์ด ํ•จ์ˆ˜ ์Šค์ฝ”ํ”„

 

var๋Š” ํ•จ์ˆ˜ ์Šค์ฝ”ํ”„(ํ•จ์ˆ˜๋งŒ ์‹ ๊ฒฝ ์”€)๋ผ์„œ if ๋ฌธ ์•ˆ์— ๋“ค์–ด ์žˆ์œผ๋ฉด ๋ฐ”๊นฅ์—์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค

ํ•˜์ง€๋งŒ, let์€ ๊ทธ๋ ‡์ง€ ์•Š๋‹ค

 

 

let์ด ๋ธ”๋ก ์Šค์ฝ”ํ”„(๋ธ”๋ก์„ ์‹ ๊ฒฝ ์”€)๋ผ์„œ ๊ทธ๋ ‡๋‹ค. ๋ธ”๋ก์€ if ๋ฌธ, for ๋ฌธ, while ๋ฌธ, ํ•จ์ˆ˜์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋Š” {}๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

๋ธ”๋ก ๋ฐ”๊นฅ์—์„œ๋Š” ๋ธ”๋ก ์•ˆ์— ์žˆ๋Š” let์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†์Œ! const๋„ let๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ธ”๋ก ์Šค์ฝ”ํ”„

 

for (var i = 0; i < winBalls.length; i++) {
  setTimeout( () => {
    console.log(winBalls[i], i);
    drawBall(winBalls[i], $result);
  }, 1000 * (i + 1));
}

 

๋ณด๋ผ์ƒ‰ i์™€ ์—ฐ๋‘์ƒ‰ i ๋Š” ๊ฐ๊ฐ ๋‹ค๋ฅธ ์‹œ์ ์— ์‹คํ–‰ ๋œ๋‹ค

1000 * (i + 1)๋Š” for๋ฌธ์„ ๋Œ ๋•Œ ์‹คํ–‰ ๋˜๊ณ 

setTimeout์˜ ์ฝœ๋ฐฑํ•จ์ˆ˜๋Š” ์ง€์ • ์‹œ๊ฐ„ ๋’ค์— ํ˜ธ์ถœ ๋œ๋‹ค. for๋ฌธ์ด ๋นจ๋ฆฌ ๋Œ์•„์„œ ์ฝœ๋ฐฑํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋ ๋•Œ๋Š” ์ด๋ฏธ i๊ฐ€ 6์ด ๋˜์–ด ์žˆ์Œ

<var์ผ ๋•Œ ์‹คํ–‰ ์ˆœ์„œ>
i๊ฐ€ 0์ผ ๋•Œ setTimeout(์ฝœ๋ฐฑ0, 1000) ์‹คํ–‰
i๊ฐ€ 1์ผ ๋•Œ setTimeout(์ฝœ๋ฐฑ1, 2000) ์‹คํ–‰
i๊ฐ€ 2์ผ ๋•Œ setTimeout(์ฝœ๋ฐฑ2, 3000) ์‹คํ–‰
i๊ฐ€ 3์ผ ๋•Œ setTimeout(์ฝœ๋ฐฑ3, 4000) ์‹คํ–‰
i๊ฐ€ 4์ผ ๋•Œ setTimeout(์ฝœ๋ฐฑ4, 5000) ์‹คํ–‰
i๊ฐ€ 5์ผ ๋•Œ setTimeout(์ฝœ๋ฐฑ5, 6000) ์‹คํ–‰
i๊ฐ€ 6์ด ๋จ 
1์ดˆ ํ›„ ์ฝœ๋ฐฑ0 ์‹คํ–‰(i๋Š” 6) 
2์ดˆ ํ›„ ์ฝœ๋ฐฑ1 ์‹คํ–‰(i๋Š” 6)
3์ดˆ ํ›„ ์ฝœ๋ฐฑ2 ์‹คํ–‰(i๋Š” 6) 
4์ดˆ ํ›„ ์ฝœ๋ฐฑ3 ์‹คํ–‰(i๋Š” 6) 
5์ดˆ ํ›„ ์ฝœ๋ฐฑ4 ์‹คํ–‰(i๋Š” 6) 
6์ดˆ ํ›„ ์ฝœ๋ฐฑ5 ์‹คํ–‰(i๋Š” 6)

์ฝœ๋ฐฑ ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋  ๋•Œ i๋ฅผ ์ฝ˜์†”๋กœ ์ถœ๋ ฅํ•˜๋ฉด 6์ด ๋‚˜์˜ด

winBalls๋Š” ์ธ๋ฑ์Šค๊ฐ€ 5๊นŒ์ง€๋ฐ–์— ์—†์œผ๋ฏ€๋กœ winBalls[6]์€ undefined๊ฐ€ ๋‚˜์˜จ๋‹ค

 

let์€ ๋ธ”๋ก ๋‚ด๋ถ€์˜ i์— ๊ณ ์ •์ด ๋œ๋‹ค

var๋Š” ๋ธ”๋ก ์•ˆ์—์„œ ๊ณ ์ •๋˜์ง€ ์•Š์Œ

 

๊ทธ๋ ‡๋‹ค๋ฉด, let์œผ๋กœ ์ผ์„ ๋•Œ ์ž˜ ์ž‘๋™ํ•˜๋˜ ์œ„์˜ ์ฝ”๋“œ๋ฅผ var๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ํ• ๊นŒ?

//ํ•จ์ˆ˜๋ฅผ ๋ฐ”๋กœ ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ๋ฒ• ํ•จ์ˆ˜๋ฅผ ์†Œ๊ด„ํ˜ธ๋กœ ๊ฐ์‹ธ๊ณ  ํ˜ธ์ถœ
(function(j){
    setTimeout(()=>{
        console.log(winBalls[j], j);
        addBall(winBalls[i] ,$result);
    }, (i+1)*1000);
})(i);

์ด ๋•Œ ๋“ค์–ด๊ฐ„ j ๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜์ธ๋ฐ, ํ•จ์ˆ˜์•ˆ์— ๊ฐ‡ํžŒ๋‹ค

j๋Š” ๊ทธ ๋•Œ ๊ทธ ๋•Œ ๋ฐ›์•„์˜ค๋Š” i๊ฐ€ ๋œ๋‹ค

 

 

728x90

๋Œ“๊ธ€