๐ ์ผ์ ์๊ฐ ํ์ ์คํํ๊ธฐ
๋ฝ์ ๊ณต๋ค์ ํ๋ฉด์ ํ์ํ์. 1์ด์ ํ๋์ฉ ๋ฝ์ ๊ฒ์ด๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์์๋ setTimeout ํจ์๋ก ์ง์ ํ ์๊ฐ ๋ค์ ์ฝ๋๊ฐ ์คํ๋๊ฒ ํ ์ ์๋ค.
setTimeout(() => {
// ๋ด์ฉ
}, ๋ฐ๋ฆฌ์ด);
//์ฝ๋์ถ์ฒ (๋์) Let's Get IT ์๋ฐ์คํฌ๋ฆฝํธ ํ๋ก๊ทธ๋๋ฐ
๋ฐ๋ฆฌ์ด๋? 1000 ๋ถ์ 1์ด
์ด๋ setTimeout ์์ ๋ฃ๋ ํจ์๋ ํน์ ์์ ( ์ง์ ํ ์๊ฐ๊น์ง ๊ธฐ๋ค๋ฆฌ๊ธฐ ) ์ดํ์ ์ถ๊ฐ๋ก ์คํ๋๋ ํจ์์ด๋ฏ๋ก ์ฝ๋ฐฑ ํจ์๋ก ๋ณผ ์ ์๋ค.
๋ ๋ฒ์งธ ์ธ์๊ฐ ๋ฐ๋ฆฌ์ด ๋จ์์ด๋ฏ๋ก ์ํ๋ ์ด์ 1000์ ๊ณฑํด์ผ ํ๋ค.
์ฒซ ๋ฒ์งธ ์ธ์๋ก ๋ฃ์ ํจ์๋ ์ง์ ํ ๋ฐ๋ฆฌ์ด ํ์ ์คํ๋๋ค.
์ฒซ๋ฒ์งธ ์ธ์ | ๋ฐ๋ฆฌ์ด ๋จ๋ค ( ์ํ๋ ์ด์ 1000์ ๊ณฑํ๋ค ) |
๋๋ฒ์งธ ์ธ์ | ์ง์ ํ ๋ฐ๋ฆฌ์ด ํ์ ์คํ๋๋ค |
Quiz!
3.5์ด ๋ค์ ๋ค์ func ํจ์๋ฅผ ์คํํด๋ณด์๋ผ.
function func() { console.log('hello'); } //์ฝ๋์ถ์ฒ (๋์) Let's Get IT ์๋ฐ์คํฌ๋ฆฝํธ ํ๋ก๊ทธ๋๋ฐโ
๋ต
setTimeout(func, 3500);โ
์๋์ ๊ฐ์ด ์์ฑํ ์๋ ์์ง๋ง, ๋ด๋ถ ํจ์๊ฐ ํ๋์ด๊ณ ์ธ์๊ฐ ์๋ ๊ฒฝ์ฐ์๋ ์ ์ฝ๋์ฒ๋ผ ์ค์ฌ ์ธ ์ ์๋ค.
setTimeout(() => { func(); }, 3500);โ
์ฒซ ๋ฒ์งธ ๊ณต์ 1์ด ๋ค์ ๋ฝ๋ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ๋ค.
<script>
const candidate = Array(45).fill().map((v,i)=> i + 1); //45๊ฐ๋ฅผ ๋ฐฐ์ด์ ๋ด์๋๊ธฐ.
//shuffle ๋ฐฐ์ด์๋ค ๋๋ค์ผ๋ก ๋ฃ์ ๊ฒ์ด๋ค.
const shuffle = [];
while (candidate.length > 0){
const random = Math.floor(Math.random() * candidate.length); //๋ฌด์์ ์ธ๋ฑ์ค ๋ฝ๊ธฐ.
const spliceArray = candidate.splice(random , 1); //๋ฝ์ ๊ฐ์ ๋ฐฐ์ด์ ๋ค์ด ์์.
const value = spliceArray[0]; //๋ฐฐ์ด์ ๋ค์ด ์๋ ๊ฐ์ ๊บผ๋ด์ด,
shuffle.push(value); //shuffle ๋ฐฐ์ด์ ๋ฃ๊ธฐ.
}
console.log(shuffle);
//shuffle์์ ์์์ 6๊ฐ๋ฅผ ์๋ฅด๊ณ ,์ ๋ ฌ.
const winBalls = shuffle.slice(0,6).sort((a,b) => a - b);
const bonus = shuffle[6]; //์
ํ์์ 7๋ฒ์งธ
console.log(winBalls,bonus);
const $result = document.querySelector('#result'); //html ์ result๋ฅผ ์ ํํ๋ค.
setTimeout(() => {
const $ball = document.createElement('div'); //1์ด ๋ค์ div ํ๊ทธ๋ฅผ ๋ง๋ ๋ค
$ball.className = 'ball'; //divํ๊ทธ์ ํด๋์ค๋ค์์ ball๋ก ์ง์ ํ๋ค.
//html์์๋ class์ด์ง๋ง ์๋ฐ์คํฌ๋ฆฝํธ์์๋ className์ด๋ค.
$ball.textContent = winBalls[0]; //๋ฝ์๋ ์ฒซ๋ฒ์งธ ์๋ฆฌ ์ซ์๋ฅผ
$result.appendChild($ball); //html ์ result์ ์ถ๊ฐํ๋ค.
}, 1000); //์ฒซ๋ฒ์งธ ์ธ์์ ์ฝ๋๋ 1์ด ๋ค์ ์์ํ๋ค.
</script>
<!--์ฝ๋์ถ์ฒ (๋์) Let's Get IT ์๋ฐ์คํฌ๋ฆฝํธ ํ๋ก๊ทธ๋๋ฐ-->
๐ ํ์ด๋จธ์ ๋ฐ๋ณต๋ฌธ ๊ฐ์ด ์ฌ์ฉํ๊ธฐ
์ด์ 7๊ฐ์ ๊ณต์ ๋ชจ๋ ํ๋ฉด์ ํ์ํ ๊ฒ์ด๋ค.
setTimeout ์ 7๋ฒ ์ฌ์ฉํด๋ ๋์ง๋ง, ๊ทธ๋ ๊ฒ ํ๋ฉด ์ฝ๋๊ฐ ์ค๋ณต๋๋ฏ๋ก ๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉํ ๊ฒ์ด๋ค.

while๋ฌธ ๊ณผ for๋ฌธ ์ค ์ด๋ค ๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉํ ๊น?
for๋ฌธ
์๋ํ๋ฉด ๋ช ๋ฒ ๋ฐ๋ณตํด์ผํ ์ง ์๊ธฐ ๋๋ฌธ์ด๋ค.
while๋ฌธ ์ธ ์ง for๋ฌธ ์ธ ์ง ๊ณ ๋ฏผ๋ ๋
[ JavaScript ] ํ์ด๋จธ ์ฌ์ฉํ๊ธฐ_ ๋ก๋ ์ถ์ฒจ๊ธฐ_1 ( ๊ฐ์ข ์ฐธ๊ณ )
๋ค์ด๊ฐ๊ธฐ ํ์ด๋จธ๋ฅผ ์ฌ์ฉํ์ฌ ๋ก๋ ์ถ์ฒจ๊ธฐ๋ฅผ ๋ง๋ค ๊ฒ์ด๋ค. ํ์ด๋จธ๋ณด๋ค ๋น๋๊ธฐ๋ผ๋ ๊ฐ๋ ์ ์ตํ๋ ๊ฒ์ด ๋ ์ค์ํ๋ค. Note! ๋น๋๊ธฐ๊ฐ ๋ญ๊ฐ์? ๋น๋๊ธฐ๋ ๋๊ธฐ์ ๋ฐ๋๋ง๋ก, ์ค์ ์ฝ๋ฉํ ์์์ ๋ค๋ฅด
irro.tistory.com
๋ณด๋์ค ๊ณต์ ์ ์ธํ ์ผ๋ฐ ๊ณต 6๊ฐ๋ฅผ ํ๋ฉด์ ํ์ํ๊ฒ ๋ค.
<script>
const candidate = Array(45).fill().map((v,i)=> i + 1); //45๊ฐ๋ฅผ ๋ฐฐ์ด์ ๋ด์๋๊ธฐ.
//shuffle ๋ฐฐ์ด์๋ค ๋๋ค์ผ๋ก ๋ฃ์ ๊ฒ์ด๋ค.
const shuffle = [];
while (candidate.length > 0){
const random = Math.floor(Math.random() * candidate.length); //๋ฌด์์ ์ธ๋ฑ์ค ๋ฝ๊ธฐ.
const spliceArray = candidate.splice(random , 1); //๋ฝ์ ๊ฐ์ ๋ฐฐ์ด์ ๋ค์ด ์์.
const value = spliceArray[0]; //๋ฐฐ์ด์ ๋ค์ด ์๋ ๊ฐ์ ๊บผ๋ด์ด,
shuffle.push(value); //shuffle ๋ฐฐ์ด์ ๋ฃ๊ธฐ.
}
console.log(shuffle);
//shuffle์์ ์์์ 6๊ฐ๋ฅผ ์๋ฅด๊ณ ,์ ๋ ฌ.
const winBalls = shuffle.slice(0,6).sort((a,b) => a - b);
const bonus = shuffle[6]; //์
ํ์์ 7๋ฒ์งธ
console.log(winBalls,bonus);
const $result = document.querySelector('#result'); //html ์ result๋ฅผ ์ ํํ๋ค.
for(let i=0; i<winBalls.length; i++){ // 0๋ถํฐ winBalls.length -1 (5)๊น์ง ๋ฐ๋ณต.
setTimeout(() => {
const $ball = document.createElement('div'); //1์ด ๋ค์ div ํ๊ทธ๋ฅผ ๋ง๋ ๋ค
$ball.className = 'ball'; //divํ๊ทธ์ ํด๋์ค๋ค์์ ball๋ก ์ง์ ํ๋ค.
//html์์๋ class์ด์ง๋ง ์๋ฐ์คํฌ๋ฆฝํธ์์๋ className์ด๋ค.
$ball.textContent = winBalls[0]; //๋ฝ์๋ ์ฒซ๋ฒ์งธ ์๋ฆฌ ์ซ์๋ฅผ
$result.appendChild($ball); //html ์ result์ ์ถ๊ฐํ๋ค.
}, 1000 * (i + 1)); //์ฒซ๋ฒ์งธ ์ธ์์ ์ฝ๋๋ 1์ด x (i + 1) ๋ค์ ์์ํ๋ค.
}
</script>
<!--์ฝ๋์ถ์ฒ (๋์) Let's Get IT ์๋ฐ์คํฌ๋ฆฝํธ ํ๋ก๊ทธ๋๋ฐ-->
1000* ( i + 1 ) ๋ฐ๋ฆฌ์ด๋ง๋ค ๊ณต์ ํ๋์ฉ ์์ฑํด์ winBalls [ i ] ์ซ์๋ฅผ ๋ฃ๊ณ ์๋ค.
1์ด์๋ winBalls [ 0 ] , 2์ด์๋ winBalls [ 1 ] , 3์ด์๋ winBalls [ 2 ] ๊ณต์ด ์์ฑ๋๋ค.
๋ณด๋์ค ๊ณต์ 7์ด ๋ค์ ํ์ํ๋ฉด ๋๋ค.
<script>
const candidate = Array(45).fill().map((v,i)=> i + 1); //45๊ฐ๋ฅผ ๋ฐฐ์ด์ ๋ด์๋๊ธฐ.
//shuffle ๋ฐฐ์ด์๋ค ๋๋ค์ผ๋ก ๋ฃ์ ๊ฒ์ด๋ค.
const shuffle = [];
while (candidate.length > 0){
const random = Math.floor(Math.random() * candidate.length); //๋ฌด์์ ์ธ๋ฑ์ค ๋ฝ๊ธฐ.
const spliceArray = candidate.splice(random , 1); //๋ฝ์ ๊ฐ์ ๋ฐฐ์ด์ ๋ค์ด ์์.
const value = spliceArray[0]; //๋ฐฐ์ด์ ๋ค์ด ์๋ ๊ฐ์ ๊บผ๋ด์ด,
shuffle.push(value); //shuffle ๋ฐฐ์ด์ ๋ฃ๊ธฐ.
}
console.log(shuffle);
//shuffle์์ ์์์ 6๊ฐ๋ฅผ ์๋ฅด๊ณ ,์ ๋ ฌ.
const winBalls = shuffle.slice(0,6).sort((a,b) => a - b);
const bonus = shuffle[6]; //์
ํ์์ 7๋ฒ์งธ
console.log(winBalls,bonus);
const $result = document.querySelector('#result'); //html ์ result๋ฅผ ์ ํํ๋ค.
for(let i=0; i<winBalls.length; i++){ // 0๋ถํฐ winBalls.length -1 (5)๊น์ง ๋ฐ๋ณต.
setTimeout(() => {
const $ball = document.createElement('div'); //1์ด ๋ค์ div ํ๊ทธ๋ฅผ ๋ง๋ ๋ค
$ball.className = 'ball'; //divํ๊ทธ์ ํด๋์ค๋ค์์ ball๋ก ์ง์ ํ๋ค.
//html์์๋ class์ด์ง๋ง ์๋ฐ์คํฌ๋ฆฝํธ์์๋ className์ด๋ค.
$ball.textContent = winBalls[0]; //๋ฝ์๋ ์ฒซ๋ฒ์งธ ์๋ฆฌ ์ซ์๋ฅผ
$result.appendChild($ball); //html ์ result์ ์ถ๊ฐํ๋ค.
}, 1000 * (i + 1)); //์ฒซ๋ฒ์งธ ์ธ์์ ์ฝ๋๋ 1์ด x (i + 1) ๋ค์ ์์ํ๋ค.
}
const $bonus = document.querySelector('#bonus'); //html ์ bonus๋ฅผ ์ ํํ๋ค.
setTimeout(() => {
const $ball = document.createElement('div'); //1์ด ๋ค์ div ํ๊ทธ๋ฅผ ๋ง๋ ๋ค
$ball.className = 'ball'; //divํ๊ทธ์ ํด๋์ค๋ค์์ ball๋ก ์ง์ ํ๋ค.
$ball.textContent = bonus; //๋ฝ์๋ ๋ณด๋์ค ์ซ์๋ฅผ
$bonus.appendChild($ball); //html ์ bonus์ ์ถ๊ฐํ๋ค.
}, 7000); //์ฒซ๋ฒ์งธ ์ธ์์ ์ฝ๋๋ 7์ด๋ค์ ์์ํ๋ค.
</script>
<!--์ฝ๋์ถ์ฒ (๋์) Let's Get IT ์๋ฐ์คํฌ๋ฆฝํธ ํ๋ก๊ทธ๋๋ฐ-->

์ผ๋ฐ ๊ณต์ ๋ฝ๋ ์ฝ๋์ ์ค๋ณต๋๋ค. ์ด๋ป๊ฒ ํด์ผ ํ ๊น?
์ค๋ณต๋๋ ๊ฒ์ ํจ์๋ก ๋ฝ๊ณ , ์ค๋ณต๋์ง ์๋ ๊ฒ์ ๋งค๊ฐ๋ณ์๋ก ๋ง๋ ๋ค.
<script>
const candidate = Array(45).fill().map((v,i)=> i + 1); //45๊ฐ๋ฅผ ๋ฐฐ์ด์ ๋ด์๋๊ธฐ.
//shuffle ๋ฐฐ์ด์๋ค ๋๋ค์ผ๋ก ๋ฃ์ ๊ฒ์ด๋ค.
const shuffle = [];
while (candidate.length > 0){
const random = Math.floor(Math.random() * candidate.length); //๋ฌด์์ ์ธ๋ฑ์ค ๋ฝ๊ธฐ.
const spliceArray = candidate.splice(random , 1); //๋ฝ์ ๊ฐ์ ๋ฐฐ์ด์ ๋ค์ด ์์.
const value = spliceArray[0]; //๋ฐฐ์ด์ ๋ค์ด ์๋ ๊ฐ์ ๊บผ๋ด์ด,
shuffle.push(value); //shuffle ๋ฐฐ์ด์ ๋ฃ๊ธฐ.
}
console.log(shuffle);
//shuffle์์ ์์์ 6๊ฐ๋ฅผ ์๋ฅด๊ณ ,์ ๋ ฌ.
const winBalls = shuffle.slice(0,6).sort((a,b) => a - b);
const bonus = shuffle[6]; //์
ํ์์ 7๋ฒ์งธ
console.log(winBalls,bonus);
const $result = document.querySelector('#result'); //html ์ result๋ฅผ ์ ํํ๋ค.
//์ค๋ณต๋๋ ๊ฒ์ ํจ์๋ก ๋ฝ๊ธฐ.
function drawBall( number, $parent) {
const $ball = document.createElement('div'); //1์ด ๋ค์ div ํ๊ทธ๋ฅผ ๋ง๋ ๋ค
$ball.className = 'ball'; //divํ๊ทธ์ ํด๋์ค๋ค์์ ball๋ก ์ง์ ํ๋ค.
//html์์๋ class์ด์ง๋ง ์๋ฐ์คํฌ๋ฆฝํธ์์๋ className์ด๋ค.
$ball.textContent = number; //๋ฝ์๋ ์ซ์๋ฅผ
$parent.appendChild($ball); //html ์ $parent ๋งค๊ฐ๋ณ์์ ์ถ๊ฐํ๋ค.
}
for(let i=0; i<winBalls.length; i++){ // 0๋ถํฐ winBalls.length -1 (5)๊น์ง ๋ฐ๋ณต.
setTimeout(() => {
drawBall(winBalls[i], $result); //ํจ์ ํธ์ถํด์ ์ธ์ ๋์
ํ๊ธฐ.
}, 1000 * (i + 1)); //์ฒซ๋ฒ์งธ ์ธ์์ ์ฝ๋๋ 1์ด x (i + 1) ๋ค์ ์์ํ๋ค.
}
//์ค๋ณต๋์ง ์๋ ๊ฒ์ ๋งค๊ฐ๋ณ์๋ก ๋ง๋ค๊ธฐ.
const $bonus = document.querySelector('#bonus'); //html ์ bonus๋ฅผ ์ ํํ๋ค.
setTimeout(() => {
drawBall(bonus, $bonus); //ํจ์ ํธ์ถํด์ ์ธ์ ๋์
ํ๊ธฐ.
}, 7000); //์ฒซ๋ฒ์งธ ์ธ์์ ์ฝ๋๋ 7์ด๋ค์ ์์ํ๋ค.
</script>
<!--์ฝ๋์ถ์ฒ (๋์) Let's Get IT ์๋ฐ์คํฌ๋ฆฝํธ ํ๋ก๊ทธ๋๋ฐ-->
drawBall ํจ์๋ฅผ ๋ง๋ ๋ค, ๋ฌ๋ผ์ง๋ ๋ถ๋ถ์ธ ์ซ์์ ๋ถ๋ชจ ํ๊ทธ๋ฅผ ๊ฐ๊ฐ number, $parent ๋งค๊ฐ ๋ณ์๋ก ๋ง๋ค์๋ค.
์ค๋ณต์ ๊ฑฐํ๋ ๊ฒ์ ๋ฆฌํฉํ ๋ง ( refactoring ) ์ด๋ผ๊ณ ํ๋ค.
๐ var ์ let ์ ์ฐจ์ด ์ดํดํ๊ธฐ
์์์ ์์ฑํ ๋ฐ๋ณต๋ฌธ ๋ถ๋ถ์ ์ ๊น let ์์ var ๋ก ๋ฐ๊ฟ๋ณด์.
for(var i=0; i<winBalls.length; i++){ // 0๋ถํฐ winBalls.length -1 (5)๊น์ง ๋ฐ๋ณต.
setTimeout(() => {
drawBall(winBalls[i], $result); //ํจ์ ํธ์ถํด์ ์ธ์ ๋์
ํ๊ธฐ.
}, 1000 * (i + 1)); //์ฒซ๋ฒ์งธ ์ธ์์ ์ฝ๋๋ 1์ด x (i + 1) ๋ค์ ์์ํ๋ค.
}
//์ฝ๋์ถ์ฒ (๋์) Let's Get IT ์๋ฐ์คํฌ๋ฆฝํธ ํ๋ก๊ทธ๋๋ฐ
์ด์งธ์ ์ด๋ ๊ฒ ๊ฒฐ๊ณผ๊ฐ ๋์ค๋๊ฑธ๊น?
๋ณ์๋ ์ค์ฝํ ( scope, ๋ฒ์ ) ๋ผ๋ ๊ฒ์ ๊ฐ์ง๋ค.
var | ํจ์ ์ค์ฝํ |
let | ๋ธ๋ก ์ค์ฝํ |
const | ๋ธ๋ก ์ค์ฝํ |
ํจ์ ์ค์ฝํ๊ฐ ๋ฌด์์ธ๊ฐ?
a๋ฅผ ์ฝ์๋ก ์ถ๋ ฅํ๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํ๋ค. a๋ ํจ์ ์์ ์ ์ธ๋ ๋ณ์์ด๋ฏ๋ก ํจ์ ๋ฐ๊นฅ์์๋ ์ ๊ทผํ ์ ์๋ค.
์ด๋ ๊ฒ ํจ์๋ฅผ ๊ฒฝ๊ณ๋ก ์ ๊ทผ ์ฌ๋ถ๊ฐ ๋ฌ๋ผ์ง๋ ๊ฒ์ ํจ์ ์ค์ฝํ๋ผ๊ณ ํ๋ค.
if๋ฌธ์ ์ฐ๋ฉด ๋ค๋ฅผ ์๋?
์ด๋ฒ์๋ if ๋ฌธ ์์ var๋ฅผ ๋ฃ์ด๋ณด์.
var ๋ ํจ์ ์ค์ฝํ ( ํจ์๋ง ์ ๊ฒฝ์ ) ๋ผ์ if ๋ฌธ ์์ ๋ค์ด ์์ผ๋ฉด ๋ฐ๊นฅ์์ ์ ๊ทผํ ์ ์๋ค.
๊ทธ๋ฐ๋ฐ let ์ ๋ค๋ฅด๋ค.
let ์ ๊ฒฝ์ฐ์๋ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
์ด์ ๋ let ์ด ๋ธ๋ก ์ค์ฝํ ( ๋ธ๋ก์ ์ ๊ฒฝ์ ) ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
๋ธ๋ก | if ๋ฌธ, for ๋ฌธ, while ๋ฌธ, ํจ์์์ ๋ณผ ์ ์๋ { } ๋ฅผ ์๋ฏธํ๋ค. |
๋ธ๋ก ๋ฐ๊นฅ์์๋ ๋ธ๋ก ์์ ์๋ let ์ ์ ๊ทผํ ์ ์๋ค.
for๋ฌธ์ ์ฐ๋ฉด ์ด๋ป๊ฒ ๋ ๊น?
var ๋ ๋ธ๋ก๊ณผ ๊ด๊ณ๊ฐ ์์ผ๋๊น ๋ฌธ์ ์์ด ๋์๊ฐ๋ค.
let ์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค. for ๋ฌธ ๋ธ๋ก ๋ฐ๊นฅ์์ ์ ๊ทผํ๊ธฐ ๋๋ฌธ์ด๋ค.
์์น์์ผ๋ก๋ let ์ด ๋ธ๋ก ๋ฐ๊นฅ์ ์์ง๋ง, for ๋ฌธ์ ๋ธ๋ก ์์ ์๋ ๊ฒ์ผ๋ก ์น๋ค.
๋ณธ๋ก ์ผ๋ก ๋์๊ฐ์ ์ ๋ฐ๋ณต๋ฌธ์์ let ๊ณผ var ๋ฅผ ์ฌ์ฉํ ๊ฒฐ๊ณผ๊ฐ ๋ค๋ฅธ ์ด์ ๋ฅผ ๋ค์ ์ดํด๋ณธ๋ค.
for(var i=0; i<winBalls.length; i++){ // 0๋ถํฐ winBalls.length -1 (5)๊น์ง ๋ฐ๋ณต.
setTimeout(() => {
drawBall(winBalls[i], $result); //ํจ์ ํธ์ถํด์ ์ธ์ ๋์
ํ๊ธฐ.
}, 1000 * (i + 1)); //์ฒซ๋ฒ์งธ ์ธ์์ ์ฝ๋๋ 1์ด x (i + 1) ๋ค์ ์์ํ๋ค.
}
//์ฝ๋์ถ์ฒ (๋์) Let's Get IT ์๋ฐ์คํฌ๋ฆฝํธ ํ๋ก๊ทธ๋๋ฐ
setTimeout ์ ์ฝ๋ฐฑ ํจ์ ์์ ๋ i ์ ๋ฐ๊นฅ์ 1000 * ( i+1 ) ๋ ๋ค๋ฅธ ์์ ์ ์คํ๋๋ค.
1000 * ( i+1 ) ๋ ๋ฐ๋ณต๋ฌธ์ ๋ ๋ ์คํ๋๊ณ , setTimeout ์ ์ฝ๋ฐฑ ํจ์๋ ์ง์ ํ ์๊ฐ ๋ค์ ์คํํ๋ค.
๊ทธ๋ฐ๋ฐ ๋ฐ๋ณต๋ฌธ์ ๋งค์ฐ ๋น ๋ฅธ ์๋๋ก ๋์์ ์ฝ๋ฐฑ ํจ์๊ฐ ์คํ๋ ๋๋ ์ด๋ฏธ i ๊ฐ 6 ( winBalls.length ๊ฐ 6 ) ์ด ๋์ด ์๋ค.
<!--
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)
-->
<!--์ฝ๋์ถ์ฒ (๋์) Let's Get IT ์๋ฐ์คํฌ๋ฆฝํธ ํ๋ก๊ทธ๋๋ฐ-->
๋ฐ๋ผ์ ์ฝ๋ฐฑ ํจ์๊ฐ ์คํ๋ ๋ i ๋ฅผ ์ฝ์๋ก ์ถ๋ ฅํ๋ฉด 6 ์ด ๋์จ๋ค. ๊ทธ๋ฆฌ๊ณ winBalls ๋ ์ธ๋ฑ์ค๊ฐ 5๊น์ง๋ง ์์ผ๋ฏ๋ก winBalls[6] ๋ undefined ๊ฐ ๋๋ค.

๊ทธ๋ฐ๋ฐ ์ let ์ ์ธ ๋๋ ์ด๋ฌํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์์์๊น? let ์ฝ๋๋ฅผ ๋ณด์.
for(let i=0; i<winBalls.length; i++){ // 0๋ถํฐ winBalls.length -1 (5)๊น์ง ๋ฐ๋ณต.
setTimeout(() => {
drawBall(winBalls[i], $result); //ํจ์ ํธ์ถํด์ ์ธ์ ๋์
ํ๊ธฐ.
}, 1000 * (i + 1)); //์ฒซ๋ฒ์งธ ์ธ์์ ์ฝ๋๋ 1์ด x (i + 1) ๋ค์ ์์ํ๋ค.
}
//์ฝ๋์ถ์ฒ (๋์) Let's Get IT ์๋ฐ์คํฌ๋ฆฝํธ ํ๋ก๊ทธ๋๋ฐ
for ๋ฌธ์์ ์ฐ์ด๋ let ์ ํ๋์ ๋ธ๋ก๋ง๋ค i ๊ฐ ๊ณ ์ ๋๋ค. ์ด๊ฒ๋ ๋ธ๋ก ์ค์ฝํ์ ํน์ฑ์ด๋ค.
๋ฐ๋ผ์ setTimeout ์ฝ๋ฐฑ ํจ์ ๋ด๋ถ์ i ๋ setTimeout ์ ํธ์ถํ ๋์ i ์ ๊ฐ์ ๊ฐ์ด ๋ค์ด๊ฐ๋ค.
์ค์ฝํ ๊ด๋ จ ์์์ผํ ์
๋ฐ๋ณต๋ฌธ๊ณผ var ๋ฅผ ์ธ ๋ ํญ์ ์ค์ฝํ ๊ด๋ จ ๋ฌธ์ ๊ฐ ์๊ธฐ๋ ๊ฒ์ ์๋๋ค.
setTimeout ๊ฐ์ ๋น๋๊ธฐ ํจ์์ ๋ฐ๋ณต๋ฌธ, var ๋ฅผ ๋ง๋๋ฉด ์ด๋ฐ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
๐ ์ ์ฒด ์ฝ๋
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>๋ก๋์ถ์ฒจ๊ธฐ</title>
<style>
.ball {
display: inline-block;
border: 1px solid black;
border-radius: 20px;
width: 40px;
height: 40px;
line-height: 40px;
font-size: 20px;
text-align: center;
margin-right: 20px;
}
</style>
</head>
<body>
<div id="result">์ถ์ฒจ ๊ฒฐ๊ณผ๋? </div>
<div id="bonus">๋ณด๋์ค: </div>
<script>
const candidate = Array(45).fill().map((v,i)=> i + 1); //45๊ฐ๋ฅผ ๋ฐฐ์ด์ ๋ด์๋๊ธฐ.
//shuffle ๋ฐฐ์ด์๋ค ๋๋ค์ผ๋ก ๋ฃ์ ๊ฒ์ด๋ค.
const shuffle = [];
while (candidate.length > 0){
const random = Math.floor(Math.random() * candidate.length); //๋ฌด์์ ์ธ๋ฑ์ค ๋ฝ๊ธฐ.
const spliceArray = candidate.splice(random , 1); //๋ฝ์ ๊ฐ์ ๋ฐฐ์ด์ ๋ค์ด ์์.
const value = spliceArray[0]; //๋ฐฐ์ด์ ๋ค์ด ์๋ ๊ฐ์ ๊บผ๋ด์ด,
shuffle.push(value); //shuffle ๋ฐฐ์ด์ ๋ฃ๊ธฐ.
}
console.log(shuffle);
//shuffle์์ ์์์ 6๊ฐ๋ฅผ ์๋ฅด๊ณ ,์ ๋ ฌ.
const winBalls = shuffle.slice(0,6).sort((a,b) => a - b);
const bonus = shuffle[6]; //์
ํ์์ 7๋ฒ์งธ
console.log(winBalls,bonus);
const $result = document.querySelector('#result'); //html ์ result๋ฅผ ์ ํํ๋ค.
//์ค๋ณต๋๋ ๊ฒ์ ํจ์๋ก ๋ฝ๊ธฐ.
function drawBall( number, $parent) {
const $ball = document.createElement('div'); //1์ด ๋ค์ div ํ๊ทธ๋ฅผ ๋ง๋ ๋ค
$ball.className = 'ball'; //divํ๊ทธ์ ํด๋์ค๋ค์์ ball๋ก ์ง์ ํ๋ค.
//html์์๋ class์ด์ง๋ง ์๋ฐ์คํฌ๋ฆฝํธ์์๋ className์ด๋ค.
$ball.textContent = number; //๋ฝ์๋ ์ซ์๋ฅผ
$parent.appendChild($ball); //html ์ $parent ๋งค๊ฐ๋ณ์์ ์ถ๊ฐํ๋ค.
}
for(let i=0; i<winBalls.length; i++){ // 0๋ถํฐ winBalls.length -1 (5)๊น์ง ๋ฐ๋ณต.
setTimeout(() => {
drawBall(winBalls[i], $result); //ํจ์ ํธ์ถํด์ ์ธ์ ๋์
ํ๊ธฐ.
}, 1000 * (i + 1)); //์ฒซ๋ฒ์งธ ์ธ์์ ์ฝ๋๋ 1์ด x (i + 1) ๋ค์ ์์ํ๋ค.
}
//์ค๋ณต๋์ง ์๋ ๊ฒ์ ๋งค๊ฐ๋ณ์๋ก ๋ง๋ค๊ธฐ.
const $bonus = document.querySelector('#bonus'); //html ์ bonus๋ฅผ ์ ํํ๋ค.
setTimeout(() => {
drawBall(bonus, $bonus); //ํจ์ ํธ์ถํด์ ์ธ์ ๋์
ํ๊ธฐ.
}, 7000); //์ฒซ๋ฒ์งธ ์ธ์์ ์ฝ๋๋ 7์ด๋ค์ ์์ํ๋ค.
</script>
</body>
</html>
<!--์ฝ๋์ถ์ฒ (๋์) Let's Get IT ์๋ฐ์คํฌ๋ฆฝํธ ํ๋ก๊ทธ๋๋ฐ-->
-(๋์) Let's Get IT ์๋ฐ์คํฌ๋ฆฝํธ ํ๋ก๊ทธ๋๋ฐ
Let's Get IT ์๋ฐ์คํฌ๋ฆฝํธ ํ๋ก๊ทธ๋๋ฐ
๋๋ถ(TheBook): (์ฃผ)๋์์ถํ ๊ธธ๋ฒ์์ ์ ๊ณตํ๋ IT ๋์ ์ด๋ ์๋น์ค์ ๋๋ค.
thebook.io
-(๊ฐ์ข) ๋ ์ธ ๊ธฐ๋ฆฟ ์๋ฐ์คํฌ๋ฆฝํธ
https://www.inflearn.com/course/
[๋ฌด๋ฃ] [๋ฆฌ๋ด์ผ] ๋ ์ธ ๊ธฐ๋ฆฟ ์๋ฐ์คํฌ๋ฆฝํธ - ์ธํ๋ฐ | ๊ฐ์
๋ณธ ๊ฐ์์์๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ํ์ฉํด ํ๋ก๊ทธ๋๋ฐ ์ฌ๊ณ ๋ ฅ์ ๊ธฐ๋ฅด๋ ์ฐ์ต์ ํฉ๋๋ค. ์น ๊ฒ์์ธ ๊ตฌ๊ตฌ๋จ์ ์์์ผ๋ก ๋๋ง์๊ธฐ, ์ซ์ ์ผ๊ตฌ, ๋ฐ์ ์๋ ํ ์คํธ, ํฑํํ , ๋ก๋ ์ถ์ฒจ๊ธฐ, ๊ฐ์๋ฐ์๋ณด, ์นด
www.inflearn.com