ì¼ì ìê°ì´ ì§ë íì ìíë í¨ì를 ìì½ ì¤í(í¸ì¶)í ì ìê² íë ê²ì 'í¸ì¶ ì¤ì¼ì¤ë§(scheduling a call)'ì´ë¼ê³ í©ëë¤.
í¸ì¶ ì¤ì¼ì¤ë§ì 구ííë ë°©ë²ì ë ê°ì§ê° ììµëë¤.
setTimeoutì ì´ì©í´ ì¼ì ìê°ì´ ì§ë íì í¨ì를 ì¤ííë ë°©ë²setIntervalì ì´ì©í´ ì¼ì ìê° ê°ê²©ì ëê³ í¨ì를 ì¤ííë ë°©ë²
ìë°ì¤í¬ë¦½í¸ ëª
ì¸ìì setTimeoutê³¼ setIntervalê° ëª
ìëì´ìì§ ììµëë¤. íì§ë§ ìì¤ì ëì ìë 모ë ë¸ë¼ì°ì , Node.js를 í¬í¨í ìë°ì¤í¬ë¦½í¸ í¸ì¤í¸ íê²½ ëë¶ë¶ì´ ì´ì ì ì¬í ë©ìëì ë´ë¶ ì¤ì¼ì¤ë¬ë¥¼ ì§ìí©ëë¤.
setTimeout
문ë²:
let timerId = setTimeout(func|code, [delay], [arg1], [arg2], ...)
매ê°ë³ì:
func|code- ì¤ííê³ ì íë ì½ëë¡, í¨ì ëë 문ìì´ ííì ëë¤. ëê°ë ì´ ì리ì í¨ìê° ë¤ì´ê°ëë¤. íì í¸íì±ì ìí´ ë¬¸ìì´ë ë°ì ì ìê² í´ëìì§ë§ ì¶ì²íì§ ììµëë¤.
delay- ì¤í ì ë기 ìê°ì¼ë¡, ë¨ìë ë°ë¦¬ì´(millisecond, 1000ë°ë¦¬ì´ = 1ì´)ì´ë©° 기본ê°ì 0ì ëë¤.
arg1,arg2â¦- í¨ìì ì ë¬í ì¸ìë¤ë¡, IE9 ì´íìì ì§ìíì§ ììµëë¤.
ìì를 íµí´ setTimeoutì ì´ë»ê² ì¸ ì ìëì§ ììë´
ìë¤. ìë ì½ë를 ì¤ííë©´ 1ì´ íì sayHi()ê° í¸ì¶ë©ëë¤.
function sayHi() {
alert('ìë
íì¸ì.');
}
setTimeout(sayHi, 1000);
ìëì ê°ì´ í¨ìì ì¸ì를 ëê²¨ì¤ ìë ììµëë¤.
function sayHi(who, phrase) {
alert( who + ' ë, ' + phrase );
}
setTimeout(sayHi, 1000, "í길ë", "ìë
íì¸ì."); // í길ë ë, ìë
íì¸ì.
setTimeoutì 첫 ë²ì§¸ ì¸ìê° ë¬¸ìì´ì´ë©´ ìë°ì¤í¬ë¦½í¸ë ì´ ë¬¸ìì´ì ì´ì©í´ í¨ì를 ë§ëëë¤.
ìë ììê° ì ìì ì¼ë¡ ëìíë ì´ì ì´ì£ .
setTimeout("alert('ìë
íì¸ì.')", 1000);
ê·¸ë°ë° ì´ë ê² ë¬¸ìì´ì ì¬ì©íë ë°©ë²ì ì¶ì²íì§ ììµëë¤. ëëë¡ ë¤ì ììì ê°ì´ ìµëª íì´í í¨ì를 ì¬ì©íì¸ì.
setTimeout(() => alert('ìë
íì¸ì.'), 1000);
ì´ë³´ ê°ë°ìë setTimeoutì í¨ì를 ë길 ë, í¨ì ë¤ì () ì ë¶ì´ë ì¤ì를 í곤 í©ëë¤.
// ì못ë ì½ë
setTimeout(sayHi(), 1000);
setTimeoutì í¨ìì 참조 ê°ì ë°ëë¡ ì ìëì´ ìëë° sayHi()를 ì¸ìë¡ ì ë¬íë©´ í¨ì ì¤í ê²°ê³¼ê° ì ë¬ëì´ ë²ë¦½ëë¤. ê·¸ë°ë° sayHi()ì ë°íë¬¸ì´ ììµëë¤. í¸ì¶ ê²°ê³¼ë undefinedê° ëê² ì£ . ë°ë¼ì setTimeoutì ì¤ì¼ì¤ë§í ëìì ì°¾ì§ ëª»í´, ìíë ëë¡ ì½ëê° ëìíì§ ììµëë¤.
clearTimeoutì¼ë¡ ì¤ì¼ì¤ë§ ì·¨ìí기
setTimeoutì í¸ì¶íë©´ 'íì´ë¨¸ ìë³ì(timer identifier)'ê° ë°íë©ëë¤. ì¤ì¼ì¤ë§ì ì·¨ìíê³ ì¶ì ë ì´ ìë³ì(ìë ìììì timerId)를 ì¬ì©íë©´ ë©ëë¤.
ì¤ì¼ì¤ë§ ì·¨ìí기:
let timerId = setTimeout(...);
clearTimeout(timerId);
ìë ììë í¨ì ì¤íì ê³íí´ ëìë¤ê° ì¤ê°ì ë§ìì´ ë°ëì´ ê³íí´ ëìë ê²ì ì·¨ìí ìí©ì ì½ëë¡ íííê³ ììµëë¤. ìì를 ì¤íí´ë ì¤ì¼ì¤ë§ì´ ì·¨ìëì기 ë문ì ìë¬´ë° ë³íê° ìë ê²ì íì¸í ì ììµëë¤.
let timerId = setTimeout(() => alert("ìë¬´ë° ì¼ë ì¼ì´ëì§ ììµëë¤."), 1000);
alert(timerId); // íì´ë¨¸ ìë³ì
clearTimeout(timerId);
alert(timerId); // ì íì´ë¨¸ ìë³ìì ëì¼í¨ (ì·¨ì íìë ìë³ìì ê°ì nullì´ ëì§ ììµëë¤.)
ìì를 ì¤ííë©´ alert ì°½ì´ 2ê°ê° ë¨ëë°, ì´ ì¼ë¿ ì°½ì íµí´ ë¸ë¼ì°ì íê²½ìì íì´ë¨¸ ìë³ìê° ì«ìë¼ë 걸 ì ì ììµëë¤. ë¤ë¥¸ í¸ì¤í¸ íê²½ìì íì´ë¨¸ ìë³ìê° ì«ìí ì´ì¸ì ìë£íì¼ ì ììµëë¤. ì°¸ê³ ë¡ Node.jsìì setTimeoutì ì¤ííë©´ íì´ë¨¸ ê°ì²´ê° ë°íí©ëë¤.
ë¤ì íë² ë§ìë리ìë©´, ì¤ì¼ì¤ë§ì ê´í ëª ì¸ë ë°ë¡ ì¡´ì¬íì§ ììµëë¤. ëª ì¸ê° ì기 ë문ì í¸ì¤í¸ íê²½ë§ë¤ ì½ê°ì ì°¨ì´ê° ìì ìë°ì ììµëë¤.
ì°¸ê³ ë¡ ë¸ë¼ì°ì ë HTML5ì timers sectionì ì¤ìíê³ ììµëë¤.
setInterval
setInterval ë©ìëë setTimeoutê³¼ ëì¼í 문ë²ì ì¬ì©í©ëë¤.
let timerId = setInterval(func|code, [delay], [arg1], [arg2], ...)
ì¸ì ìì ëì¼í©ëë¤. ë¤ë§, setTimeoutì´ í¨ì를 ë¨ í ë²ë§ ì¤ííë ê²ê³¼ ë¬ë¦¬ setIntervalì í¨ì를 주기ì ì¼ë¡ ì¤ííê² ë§ëëë¤.
í¨ì í¸ì¶ì ì¤ë¨íë ¤ë©´ clearInterval(timerId)ì ì¬ì©íë©´ ë©ëë¤.
ë¤ì ìì를 ì¤ííë©´ ë©ìì§ê° 2ì´ ê°ê²©ì¼ë¡ ë³´ì´ë¤ê° 5ì´ ì´íìë ë ì´ì ë©ìì§ê° ë³´ì´ì§ ììµëë¤.
// 2ì´ ê°ê²©ì¼ë¡ ë©ìì§ë¥¼ ë³´ì¬ì¤
let timerId = setInterval(() => alert('째ê¹'), 2000);
// 5ì´ íì ì ì§
setTimeout(() => { clearInterval(timerId); alert('ì ì§'); }, 5000);
alert ì°½ì´ ë ìëë¼ë íì´ë¨¸ë ë©ì¶ì§ ììµëë¤.Chromeê³¼ Firefox를 í¬í¨í ëë¶ë¶ì ë¸ë¼ì°ì ë alert/confirm/prompt ì°½ì´ ë ìë ëììë ë´ë¶ íì´ë¨¸ë¥¼ ë©ì¶ì§ ììµëë¤.
ì ìì를 ì¤ííê³ ì²« ë²ì§¸ alert ì°½ì´ ë´ì ë ëª ì´ê° 기ë¤ë ¸ë¤ê° ì°½ì ë«ì¼ë©´, ë ë²ì§¸ alert ì°½ì´ ë°ë¡ ëíëë ê²ì ë³´ê³ ì´ë¥¼ íì¸í ì ììµëë¤. ì´ë° ì´ì ë¡ ì¼ë¿ ì°½ì ëª
ìí ì§ì° ìê°ì¸ 2ì´ë³´ë¤ ë ì§§ì ê°ê²©ì¼ë¡ ë¨ê² ë©ëë¤.
ì¤ì²© setTimeout
무ì¸ê°ë¥¼ ì¼ì ê°ê²©ì ëê³ ì¤ííë ë°©ë²ìë í¬ê² 2ê°ì§ê° ììµëë¤.
íëë setIntervalì ì´ì©íë ë°©ë²ì´ê³ , ë¤ë¥¸ íëë ìë ììì ê°ì´ ì¤ì²© setTimeoutì ì´ì©íë ë°©ë²ì
ëë¤.
/** setIntervalì ì´ì©íì§ ìê³ ìëì ê°ì´ ì¤ì²© setTimeoutì ì¬ì©í¨
let timerId = setInterval(() => alert('째ê¹'), 2000);
*/
let timerId = setTimeout(function tick() {
alert('째ê¹');
timerId = setTimeout(tick, 2000); // (*)
}, 2000);
ë¤ì¯ ë²ì§¸ ì¤ì setTimeoutì (*)ë¡ íìí ì¤ì ì¤íì´ ì¢
ë£ëë©´ ë¤ì í¸ì¶ì ì¤ì¼ì¤ë§í©ëë¤.
ì¤ì²© setTimeoutì ì´ì©íë ë°©ë²ì setIntervalì ì¬ì©íë ë°©ë²ë³´ë¤ ì ì°í©ëë¤. í¸ì¶ ê²°ê³¼ì ë°ë¼ ë¤ì í¸ì¶ì ìíë ë°©ìì¼ë¡ ì¡°ì í´ ì¤ì¼ì¤ë§ í ì ì기 ë문ì
ëë¤.
5ì´ ê°ê²©ì¼ë¡ ìë²ì ìì²ì ë³´ë´ ë°ì´í°ë¥¼ ì»ëë¤ê³ ê°ì í´ ë´ ìë¤. ìë²ê° ê³¼ë¶í ìíë¼ë©´ ìì² ê°ê²©ì 10ì´, 20ì´, 40ì´ ë±ì¼ë¡ ì¦ê°ìì¼ì£¼ë ê² ì¢ì ê²ëë¤.
ìëë ì´ë¥¼ 구íí ìì¬ ì½ëì ëë¤.
let delay = 5000;
let timerId = setTimeout(function request() {
...ìì² ë³´ë´ê¸°...
if (ìë² ê³¼ë¶íë¡ ì¸í ìì² ì¤í¨) {
// ìì² ê°ê²©ì ë립ëë¤.
delay *= 2;
}
timerId = setTimeout(request, delay);
}, delay);
CPU ìëª¨ê° ë§ì ìì
ì 주기ì ì¼ë¡ ì¤ííë ê²½ì°ìë setTimeoutì ì¬ê· ì¤ííë ë°©ë²ì´ ì ì©í©ëë¤. ìì
ì 걸리ë ìê°ì ë°ë¼ ë¤ì ìì
ì ì ëì ì¼ë¡ ê³íí ì ì기 ë문ì
ëë¤.
ì¤ì²© setTimeoutì ì´ì©íë ë°©ë²ì ì§ì° ê°ê²©ì ë³´ì¥íì§ë§ setIntervalì ì´ë¥¼ ë³´ì¥íì§ ììµëë¤.
ìë ë ìì를 ë¹êµí´ ë´
ìë¤. 첫 ë²ì§¸ ìììì setintervalì ì´ì©íìµëë¤.
let i = 1;
setInterval(function() {
func(i++);
}, 100);
ë ë²ì§¸ ìììì ì¤ì²© setTimeoutì ì´ì©íìµëë¤.
let i = 1;
setTimeout(function run() {
func(i++);
setTimeout(run, 100);
}, 100);
첫 ë²ì§¸ ìììì , ë´ë¶ ì¤ì¼ì¤ë¬ê° func(i++)를 100ë°ë¦¬ì´ë§ë¤ ì¤íí©ëë¤.
그림ì ë³´ê³ ëê° ììì°¨ë¦¬ì ¨ëì?
setIntervalì ì¬ì©íë©´ funcí¸ì¶ ì¬ì´ì ì§ì° ê°ê²©ì´ ì¤ì ëª
ìí ê°ê²©(100ms)ë³´ë¤ ì§§ìì§ëë¤!
ì´ë funcì ì¤ííë ë° âì모ëëâ ìê°ë ì§ì° ê°ê²©ì í¬í¨ìí¤ê¸° ë문ì
ëë¤. ì§ê·¹í ì ìì ì¸ ëìì´ì£ .
ê·¸ë ë¤ë©´ funcì ì¤ííë ë° ê±¸ë¦¬ë ìê°ì´ ëª
ìí ì§ì° ê°ê²©ë³´ë¤ 길 ë ì´ë¤ ì¼ì´ ë°ìí ê¹ì?
ì´ë° ê²½ì°ë ìì§ì´ funcì ì¤íì´ ì¢
ë£ë ëê¹ì§ 기ë¤ë ¤ì¤ëë¤. funcì ì¤íì´ ì¢
ë£ëë©´ ìì§ì ì¤ì¼ì¤ë¬ë¥¼ íì¸íê³ , ì§ì° ìê°ì´ ì§ë¬ì¼ë©´ ë¤ì í¸ì¶ì ë°ë¡ ììí©ëë¤.
ë°ë¼ì í¨ì í¸ì¶ì 걸리ë ìê°ì´ ë§¤ë² delay ë°ë¦¬ì´ë³´ë¤ 길면, 모ë í¨ìê° ì¼ ìì´ ê³ì ì°ì í¸ì¶ë©ëë¤.
íí¸, ì¤ì²© setTimeoutì ì´ì©íë©´ ë¤ìê³¼ ê°ì´ ì¤í íë¦ì´ ì´ì´ì§ëë¤.
ì¤ì²© setTimeoutì ì¬ì©íë©´ ëª
ìí ì§ì°(ì¬ê¸°ìë 100ms)ì´ ë³´ì¥ë©ëë¤.
ì´ë ê² ì§ì° ê°ê²©ì´ ë³´ì¥ëë ì´ì ë ì´ì í¨ìì ì¤íì´ ì¢ ë£ë ì´íì ë¤ì í¨ì í¸ì¶ì ëí ê³íì´ ì¸ìì§ê¸° ë문ì ëë¤.
setIntervalì´ë setTimeoutì í¨ì를 ë기면, í¨ìì ëí ë´ë¶ ì°¸ì¡°ê° ìë¡ê² ë§ë¤ì´ì§ê³ ì´ ì°¸ì¡° ì ë³´ë ì¤ì¼ì¤ë¬ì ì ì¥ë©ëë¤. ë°ë¼ì í´ë¹ í¨ì를 참조íë ê²ì´ ìì´ë setIntervalê³¼ setTimeoutì ë긴 í¨ìë ê°ë¹ì§ 컬ë ì
ì ëìì´ ëì§ ììµëë¤.
// ì¤ì¼ì¤ë¬ê° í¨ì를 í¸ì¶í ëê¹ì§ í¨ìë ë©ëª¨ë¦¬ì ì ì§ë©ëë¤.
setTimeout(function() {...}, 100);
setIntervalì ê²½ì°ë, clearIntervalì´ í¸ì¶ë기 ì ê¹ì§ í¨ìì ëí ì°¸ì¡°ê° ë©ëª¨ë¦¬ì ì ì§ë©ëë¤.
ê·¸ë°ë° ì´ë° ëì ë°©ììë ë¶ìì©ì´ íë ììµëë¤. ì¸ë¶ ë ì컬 íê²½ì 참조íë í¨ìê° ìë¤ê³ ê°ì í´ ë´ ìë¤. ì´ í¨ìê° ë©ëª¨ë¦¬ì ë¨ììë ëìì ì¸ë¶ ë³ì ìì ë©ëª¨ë¦¬ì ë¨ìì기 ë§ë ¨ì ëë¤. ê·¸ë°ë° ì´ë ê² ëë©´ ì¤ì í¨ìê° ì°¨ì§íì´ì¼ íë ê³µê°ë³´ë¤ ë ë§ì ë©ëª¨ë¦¬ ê³µê°ì´ ì¬ì©ë©ëë¤. ì´ë° ë¶ìì©ì ë°©ì§íê³ ì¶ë¤ë©´ ì¤ì¼ì¤ë§í íìê° ìì´ì§ í¨ìë ì무리 ìëë¼ë ì·¨ìíëë¡ í©ìë¤.
ë기 ìê°ì´ 0ì¸ setTimeout
setTimeout(func, 0)ì´ë setTimeout(func)ì ì¬ì©íë©´ setTimeoutì ë기 ìê°ì 0ì¼ë¡ ì¤ì í ì ììµëë¤.
ì´ë ê² ë기 ìê°ì 0ì¼ë¡ ì¤ì íë©´ funcì âê°ë¥í íâ 빨리 ì¤íí ì ììµëë¤. ë¤ë§, ì´ë ì¤ì¼ì¤ë¬ë íì¬ ì¤í ì¤ì¸ ì¤í¬ë¦½í¸ì ì²ë¦¬ê° ì¢
ë£ë ì´íì ì¤ì¼ì¤ë§í í¨ì를 ì¤íí©ëë¤.
ì´ë° í¹ì§ì ì´ì©íë©´ íì¬ ì¤í¬ë¦½í¸ì ì¤íì´ ì¢ ë£ë âì§íìâ ìíë í¨ìê° ì¤íë ì ìê² í ì ììµëë¤.
ìì를 ì¤ííë©´ ì¼ë¿ì°½ì 'Helloâì 'Worldâê° ììëë¡ ì¶ë ¥ëë ê²ì íì¸í ì ììµëë¤.
setTimeout(() => alert("World"));
alert("Hello");
ìììì 첫 ë²ì§¸ ì¤ì '0ë°ë¦¬ì´ íì í¨ì í¸ì¶í기âë¼ë í ì¼ì 'ê³ííì 기ë¡âí´ì£¼ë ìí ì í©ëë¤. ê·¸ë°ë° ì¤ì¼ì¤ë¬ë íì¬ ì¤í¬ë¦½í¸(alert í¨ì)ì ì¤íì´ ì¢
ë£ëê³ ëìì¼ 'ê³ííì ì´ë¤ í ì¼ì´ ì íìëì§ íì¸âíë¯ë¡, Helloê° ë¨¼ì , Worldì ê·¸ë¤ìì ì¶ë ¥ë©ëë¤.
ë기 ìê°ì´ 0ì¸ setTimeoutì íì©í ë¸ë¼ì°ì íê²½ììì ì ì¤ ì¼ì´ì¤ë ì´ë²¤í¸ 루íì 매í¬ë¡íì¤í¬, ë§ì´í¬ë¡íì¤í¬ìì ìì¸í ë¤ë£¨ëë¡ íê² ìµëë¤.
ë¸ë¼ì°ì ë HTML5 íì¤ìì ì í ì¤ì²© íì´ë¨¸ ì¤í ê°ê²© ê´ë ¨ ì ì½ì ì¤ìí©ëë¤. í´ë¹ íì¤ì "ë¤ì¯ ë²ì§¸ ì¤ì²© íì´ë¨¸ ì´íì ë기 ìê°ì ìµì 4ë°ë¦¬ì´ ì´ìì¼ë¡ ê°ì í´ì¼ íë¤."ë¼ë ì ì½ì´ ëª ìëì´ììµëë¤.
ìì를 ë³´ë©° ì´ ì ì½ ì¬íì ì´í´í´ë´
ìë¤. ìì ë´ setTimeoutì ì§ì° ìì´ í¨ì runì ë¤ì í¸ì¶í ì ìê² ì¤ì¼ì¤ë§ ëì´ ììµëë¤. ë°°ì´ timesìë ì¤ì ì§ì° ê°ê²©ì ëí ì ë³´ê° ê¸°ë¡ëëë¡ í´ëìëë°, ë°°ì´ timesì ì´ë¤ ê°ì´ ì ì¥ëëì§ ììë´
ìë¤.
let start = Date.now();
let times = [];
setTimeout(function run() {
times.push(Date.now() - start); // ì´ì í¸ì¶ì´ ëë ìì ê³¼ íì¬ í¸ì¶ì´ ììë ìì ì ì차를 기ë¡
if (start + 100 < Date.now()) alert(times); // ì§ì° ê°ê²©ì´ 100ms를 ëì´ê°ë©´, array를 ì¼ë¿ì°½ì ëìì¤
else setTimeout(run); // ì§ì° ê°ê²©ì´ 100ms를 ëì´ê°ì§ ìì¼ë©´ ì¬ì¤ì¼ì¤ë§í¨
});
// ì¶ë ¥ì°½ ìì:
// 1,1,1,1,9,15,20,24,30,35,40,45,50,55,59,64,70,75,80,85,90,95,100
ì쪽 íì´ë¨¸ë¤ì ì¤íì ì í ê²ì²ë¼ ì§ì° ìì´ ë°ë¡ ì¤íë©ëë¤. ê·¸ë°ë° ë¤ì¯ ë²ì§¸ ì¤ì²© íì´ë¨¸ ì´íì ì§ì° ê°ê²©ì´ 4ë°ë¦¬ì´ ì´ìì´ ëì´ 9, 15, 20, 24...ì ê°ì ê°ì´ ì ì¥ëë ê²ì íì¸í ì ììµëë¤.
ì´ë° ì ì½ì setTimeoutë¿ë§ ìëë¼ setIntervalìë ì ì©ë©ëë¤. setInterval(f)ë ì²ì ëª ë²ì í¨ì f를 ì§ì° ìì´ ì¤ííì§ë§, ëì¤ì ì§ì° ê°ê²©ì 4ë°ë¦¬ì´ ì´ìì¼ë¡ ëë ¤ë²ë¦½ëë¤.
ì´ë ì¤ëì ë¶í° ìë ì ì½ì¸ë°, 구ì ì¤í¬ë¦½í¸ ì¤ ì¼ë¶ë ìì§ ì´ ì ì½ì ìì¡´íë ê²½ì°ê° ìì´ì ëª ì¸ì를 ë³ê²½íì§ ëª»íê³ ìë ìí©ì ëë¤.
íí¸, ìë² ì¸¡ì ì´ë° ì ì½ì´ ììµëë¤. Node.jsì process.nextTickê³¼ setImmediate를 ì´ì©íë©´ ë¹ë기 ìì ì ì§ì° ìì´ ì¤íí ì ììµëë¤. ììì ì¸ê¸ë ì ì½ì ë¸ë¼ì°ì ì íì ë©ëë¤.
ìì½
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ë°ë¦¬ì´ ì´ìì ì§ì° ê°ê²©ì´ ê°ì ë¡ ëí´ì§ëë¤. ì´ë ë¸ë¼ì°ì ìë§ ì ì©ëë ì¬íì´ë©°, íì í¸íì±ì ìí´ ì ì§ëê³ ììµëë¤.
ì¤ì¼ì¤ë§ ë©ìë를 ì¬ì©í ë ëª ìí ì§ì° ê°ê²©ì´ ë³´ì¥ëì§ ìì ìë ìë¤ë ì ì ì ìí´ì¼ í©ëë¤.
ìëì ê°ì ìí©ìì ë¸ë¼ì°ì ë´ íì´ë¨¸ê° ëë ¤ì§ë©´ ì§ì° ê°ê²©ì´ ë³´ì¥ëì§ ììµëë¤.
- CPUê° ê³¼ë¶í ìíì¸ ê²½ì°
- ë¸ë¼ì°ì íì´ ë°±ê·¸ë¼ì´ë 모ëì¸ ê²½ì°
- ë ¸í¸ë¶ì´ ë°°í°ë¦¬ì ìì¡´í´ì 구ë ì¤ì¸ ê²½ì°
ì´ë° ìí©ìì íì´ë¨¸ì ìµì ì§ì° ìê°ì 300ë°ë¦¬ì´ìì ì¬íë©´ 1,000ë°ë¦¬ì´ê¹ì§ ëì´ë©ëë¤. ì°ì¥ ìê°ì ë¸ë¼ì°ì ë 구ë ì¤ì¸ ì´ì ì²´ì ì ì±ë¥ ì¤ì ì ë°ë¼ ë¤ë¦ ëë¤.
ëê¸
<code>í그를, ì¬ë¬ ì¤ë¡ 구ì±ë ì½ë를 ì½ì íê³ ì¶ë¤ë©´<pre>í그를 ì´ì©íì¸ì. 10ì¤ ì´ìì ì½ëë plnkr, JSBin, codepen ë±ì ìëë°ì¤ë¥¼ ì¬ì©íì¸ì.