
setTimeout๊ณผ setInterval
๐ setTimeout๊ณผ setInterval
๐ฅ setTimeout๊ณผ setInterval์ ์ด์ฉํ ํธ์ถ ์ค์ผ์ค๋ง
์ผ์ ์๊ฐ์ด ์ง๋ ํ์ ์ํ๋ ํจ์๋ฅผ ์์ฝ ์คํ(ํธ์ถ)ํ ์ ์๊ฒ ํ๋ ๊ฒ์ 'ํธ์ถ ์ค์ผ์ค๋ง(scheduling a call)'์ด๋ผ๊ณ ํ๋ค. ํธ์ถ ์ค์ผ์ค๋ง์ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ๋ ๊ฐ์ง๊ฐ ์๋ค.
- setTimeout์ ์ด์ฉํด ์ผ์ ์๊ฐ์ด ์ง๋ ํ์ ํจ์๋ฅผ ์คํํ๋ ๋ฐฉ๋ฒ
- setInterval์ ์ด์ฉํด ์ผ์ ์๊ฐ ๊ฐ๊ฒฉ์ ๋๊ณ ํจ์๋ฅผ ์คํํ๋ ๋ฐฉ๋ฒ
๐ง 1. setInterval
์ผ์ ํ ์๊ฐ ๊ฐ๊ฒฉ์ผ๋ก ์์ ์ ์ํํ๊ธฐ ์ํด์ ์ฌ์ฉํ๋ค.clearInterval ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ค์งํ ์ ์์ต๋๋ค. ์ฃผ์ํ ์ ์ ์ผ์ ํ ์๊ฐ ๊ฐ๊ฒฉ์ผ๋ก ์คํ๋๋ ์์ ์ด ๊ทธ ์๊ฐ ๊ฐ๊ฒฉ๋ณด๋ค ์ค๋๊ฑธ๋ฆด ๊ฒฝ์ฐ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
- ๋ณดํต ์๋์ ๊ฐ์ด ์ฌ์ฉํ๋ค.
undefined
//Hello!๋ผ๋ ๋ฌธ์์ด์ ์ฝ์์ 3์ด์ 1๋ฒ์ฉ ์คํํฉ๋๋ค. function test() { console.log("Hello!"); } setInterval(test, 3000);
- ์ test ํจ์์ ์ธ์๊ฐ ์๋ค๋ฉด?
undefined
function test(string) { console.log(string); } setInterval(function() { test("Hello!"); }, 3000);
- ์ ๋ฐฉ๋ฒ์ ์์ฉํ์ฌ ์ฌ๋ฌ ํจ์๋ฅผ ์ธ์๋ก ๋ฃ์ด์ ์คํํด ๋ณด์
undefined
function test1(string) { console.log("test1 : " + string); } function test2(string) { console.log("test2 : " + string); } setInterval(function() { test1("Hello!"); test2("World!"); }, 3000); //์์ ๊ฐ์ด setInterval ํจ์ ์์ ํจ์๋ฅผ ์ธ์๋ก ๋ฃ๊ณ ์คํํ๋ฉด ๋๊ฐ์ ํจ์๊ฐ 3์ด์ ํ๋ฒ์ฉ ์คํ๋ฉ๋๋ค. test1 : Hello! test2 : World! test1 : Hello! test2 : World!
- clearInterval
clearInterval() ํจ์๋ ํ์ฌ ์งํ๋๊ณ ์๋ ํจ์์ ์งํ์ ๋ฉ์ถ๋๋ฐ ์ฐ์ธ๋ค.
-
undefined
-
var interval = setInterval(function() { console.log("Interval"); }, 1000); //์ธ์๋ก ํจ์ ์ด๋ฆ ๋ฃ์ด์ค๋๋ค. clearInterval(interval);
-
undefined
var interval = setInterval(function() { count++; if (count === 10) { clearInterval(interval); } }, 3000);
๐ง 2. setTimeout
์ผ์ ํ ์๊ฐ ํ์ ์์ ์ ํ๋ฒ ์คํํ๋ค. ๋ณดํต ์ฌ๊ท์ ํธ์ถ์ ์ฌ์ฉํ์ฌ ์์ ์ ๋ฐ๋ณตํ๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก setInterval ๊ณผ๋ ๋ฌ๋ฆฌ ์ง์ ๋ ์๊ฐ์ ๊ธฐ๋ค๋ฆฐํ ์์ ์ ์ํํ๊ณ , ๋ค์ ์ผ์ ํ ์๊ฐ์ ๊ธฐ๋ค๋ฆฐํ ์์ ์ ์ํํ๋ ๋ฐฉ์์ด๋ค. ์ง์ ๋ ์๊ฐ ์ฌ์ด์ ์์ ์๊ฐ์ด ์ถ๊ฐ ๋๋ ๊ฒ์ด๋ค. clearTimeout() ์ ์ฌ์ฉํด์ ์์ ์ ์ค์งํ๋ค.
undefined
//5์ด ํ์ oneTime์ด๋ผ๋ string๋ฅผ ์ฝ์์ 1๋ฒ ์ฐ๊ณ ์ข ๋ฃํฉ๋๋ค. setTimeout(function() { console.log("oneTime"); }, 5000); self.scrollState = false; if (!self.scrollState) { self.mainElem.classList.add("running"); } self.scrollState = setTimeout(function() { self.mainElem.classList.remove("running"); }, 500); //setTimeout์ด ์คํ๋๋ฉด ์์๋ฅผ ๋ฆฌํด ํจ์ผ๋ก true๋ก ๋ฐ๋๋ค.
โ Point
** clearInterval(), clearTimeout()์ด ์คํ์ค์ธ ์์ ์ ์ค์ง์ํค๋ ๊ฒ์ ์๋๋ค. ์ง์ ๋ ์์ ์ ๋ชจ๋ ์คํ๋๊ณ ๋ค์ ์์ ์ค์ผ์ฅด์ด ์ค์ง ๋๋ ๊ฒ์ด๋ค.**
- setInterval(func, delay, ...args)๊ณผ setTimeout(func, delay, ...args)์ delay๋ฐ๋ฆฌ์ด ํ์ func์ ๊ท์น์ ์ผ๋ก, ๋๋ ํ๋ฒ ์คํํ๋๋ก ํด์ค๋ค.
- setIntervalยทsetTimeout์ ํธ์ถํ๊ณ ๋ฐํ๋ฐ์ ๊ฐ์ clearIntervalยทclearTimeout์ ๋๊ฒจ์ฃผ๋ฉด ์ค์ผ์ค๋ง์ ์ทจ์ํ ์ ์๋ค.
- ์ค์ฒฉ setTimeout์ ์ฌ์ฉํ๋ฉด setInterval์ ์ฌ์ฉํ ๊ฒ๋ณด๋ค ์ ์ฐํ๊ฒ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ์ฌ๊ธฐ์ ๋ํ์ฌ ์ง์ฐ ๊ฐ๊ฒฉ ๋ณด์ฅ์ด๋ผ๋ ์ฅ์ ๋ ์๋ค.
- ๋๊ธฐ ์๊ฐ์ด 0์ธ setTimeout(setTimeout(func, 0) ํน์ setTimeout(func))์ ์ฌ์ฉํ๋ฉด โํ์ฌ ์คํฌ๋ฆฝํธ์ ์คํ์ด ์๋ฃ๋ ํ ๊ฐ๋ฅํ ํ ๋น ๋ฅด๊ฒโ ์ํ๋ ํจ์๋ฅผ ํธ์ถํ ์ ์๋ค.
- ์ง์ฐ ์์ด ์ค์ฒฉ setTimeout์ 5ํ ์ด์ ํธ์ถํ๊ฑฐ๋ ์ง์ฐ ์๋ setInterval์์ ํธ์ถ์ด 5ํ ์ด์ ์ด๋ค์ง๋ฉด, 4๋ฐ๋ฆฌ์ด ์ด์์ ์ง์ฐ ๊ฐ๊ฒฉ์ด ๊ฐ์ ๋ก ๋ํด์ง๋ค. ์ด๋ ๋ธ๋ผ์ฐ์ ์๋ง ์ ์ฉ๋๋ ์ฌํญ์ด๋ฉฐ, ํ์ ํธํ์ฑ์ ์ํด ์ ์ง๋๊ณ ์๋ค.