ë§ì´í¬ë¡íì¤í¬ë ìì ì ìì±í í¨ì ëë íë¡ê·¸ë¨ì´ ì¢ ë£ëê³ JavaScript ì¤í ì¤íì´ ë¹ íì, ê·¸ë¬ë ì¬ì©ì ìì´ì í¸ê° ì¤í¬ë¦½í¸ ì¤í íê²½ì ì´ì©í기 ìí´ ì¬ì©íë ì´ë²¤í¸ 루íë¡ íµì ê¶ì ë기기ë ì ì ì¤íëë ì§§ì í¨ìì ëë¤.
ì´ëì ì´ë²¤í¸ 루íë ë¸ë¼ì°ì ì 주 ì´ë²¤í¸ 루í ëë ì¹ ì커를 구ëíë ì´ë²¤í¸ 루íì ëë¤. ë°ë¼ì ë§ì´í¬ë¡íì¤í¬ë¥¼ ì´ì©íë©´ ë¤ë¥¸ ì¤í¬ë¦½í¸ì ì¤íì ë°©í´í ìíì ê°ìíì§ ìì¼ë©´ìë, ì¬ì©ì ìì´ì í¸ê° ë°ìí기 ì ì 주ì´ì§ í¨ì를 ì¤íí ì ììµëë¤.
JavaScript íë¡ë¯¸ì¤ì Mutation Observer API ë ë¤ ë§ì´í¬ë¡íì¤í¬ í를 ì¬ì©í´ ì½ë°±ì í¸ì¶íì§ë§, ëë¡ë íì¬ ì´ë²¤í¸ 루íê° ì 리ë ëê¹ì§ ìì
ì 미루ë 기ë¥ì´ ì§ì íìí ëê° ììµëë¤. ê·¸ëì ìëíí° ë¼ì´ë¸ë¬ë¦¬, íë ììí¬, í´ë¦¬íìì ë§ì´í¬ë¡íì¤í¬ë¥¼ ì¬ì©í ì ìëë¡, Window
ì Worker
ì¸í°íì´ì¤ë queueMicrotask()
ë©ìë를 ë
¸ì¶íê³ ììµëë¤.
ë§ì´í¬ë¡íì¤í¬ë¥¼ ì¬ë°ë¥´ê² ë ¼íë ¤ë©´, ì°ì JavaScriptììì íì¤í¬ë 무ìì¸ì§, ê·¸ë¦¬ê³ ë§ì´í¬ë¡íì¤í¬ê° íì¤í¬ì ì´ë»ê² ë¤ë¥¸ì§ ìë ê²ì´ ì ì©í©ëë¤. ë¤ìì ì§§ê³ ê°ëµí ì¤ëª ì´ì§ë§, ë³´ë¤ ìì¸í ììë³´ë ¤ë©´ ì¬ì¸µ í구: ë§ì´í¬ë¡íì¤í¬ì JavaScript ë°íì íê²½ ê¸ì íì¸í´ë³´ì¸ì.
íì¤í¬íì¤í¬ë íë¡ê·¸ë¨ ì´ê¸° ìì, ì´ë²¤í¸ ì½ë°± ì¤í, ì¸í°ë²ê³¼ íììì ì¤íì²ë¼ íì¤ ë°©ìì ìí´ ìì½ë ì무 JavaScript ì½ëì ëë¤. íì¤í¬ë 모ë íì¤í¬ íìì ì¤íê¹ì§ ë기í©ëë¤.
íì¤í¬ê° íì¤í¬ íì ì¶ê°ëë ìí©ì ë¤ìê³¼ ê°ìµëë¤.
<script>
ìììì ì½ë ì¤í)ëë ê²½ì°.setTimeout()
ê³¼ setInterval()
ë¡ ì¶ê°í íììì/ì¸í°ë²ì´ ëëíë ê²½ì°. í´ë¹ ì½ë°±ì´ íì¤í¬ íì ì¶ê°ë©ëë¤.ì°ë¦¬ ì½ëì 구ëì ë§¡ì ì´ë²¤í¸ 루íë íì¤í¬ë¥¼ íì ì¶ê°ë ììëë¡ ì°¨ë¡ì°¨ë¡ ì²ë¦¬í©ëë¤. ì´ë²¤í¸ 루í í¨ì¤ê° ììíì ë ì´ë¯¸ íì ë¤ì´ìë íì¤í¬ë§ íì¬ ì£¼ê¸°ì ì¤íëë©°, ë머ì§ë ë¤ì 주기ê¹ì§ ë기í´ì¼ í©ëë¤.
ë§ì´í¬ë¡íì¤í¬ì²«ì¸ìë§ ë³´ë©´ ë§ì´í¬ë¡íì¤í¬ì íì¤í¬ì ì°¨ì´ì ì ì¬ìí´ë³´ì ëë¤. ì¤ì ë¡ ëì ë¹ì·í©ëë¤. ë ë¤ íì ì¶ê°ëë JavaScript ì½ëë¡, ì ì í ìì ì ì¤íë©ëë¤. ê·¸ë¬ë ì´ë²¤í¸ 루íì íì¬ ì£¼ê¸°ê° ììëì ë íì ì¡´ì¬íë íì¤í¬ë§ ìì°¨ì ì¼ë¡ ì²ë¦¬ëë íì¤í¬ì ë¬ë¦¬, ë§ì´í¬ë¡íì¤í¬ë ìë¹í ë¤ë¥¸ ë°©ë²ì¼ë¡ ì²ë¦¬ë©ëë¤.
ë ê°ì í° ì°¨ì´ê° ììµëë¤.
ì°ì , ë§¤ë² íì¤í¬ê° ì¢ ë£ë ëë§ë¤ ì´ë²¤í¸ 루íë ì´ íì¤í¬ê° ë¤ë¥¸ JavaScript ì½ëë¡ íµì ê¶ì ë기ëì§ íì¸í©ëë¤. ê·¸ë ì§ ìì ê²½ì° ë§ì´í¬ë¡íì¤í¬ íì 모ë ë§ì´í¬ë¡íì¤í¬ë¥¼ ì²ë¦¬í©ëë¤. ê³§ ë§ì´í¬ë¡íì¤í¬ íë, ì´ë²¤í¸ ì²ë¦¬ì 기í ì½ë°± ì¤í ì´íë§ë¤, ì¦ ì´ë²¤í¸ 루íì í 주기ì ì¬ë¬ ë² ì²ë¦¬ë©ëë¤.
ë ë²ì§¸ë¡, ë§ì´í¬ë¡íì¤í¬ê° queueMicrotask()
를 íµí´ ë ë§ì ë§ì´í¬ë¡íì¤í¬ë¥¼ íì ì¶ê°íë ê²½ì°, ì´ë ê² ìë¡ê² ì¶ê°ë ë§ì´í¬ë¡íì¤í¬ ëí ë¤ì íì¤í¬ ì¤í ì ì 모ë ì¤íë©ëë¤. ì´ë²¤í¸ 루íë ë기ì´ì´ í
ë¹ ëê¹ì§ ë§ì´í¬ë¡íì¤í¬ë¥¼ ê³ì í¸ì¶í기 ë문ì
ëë¤.
ê²½ê³ : ë§ì´í¬ë¡íì¤í¬ ì¤ì¤ë¡ ë ë§ì ë§ì´í¬ë¡íì¤í¬ë¥¼ íì ë£ì ì ìì¼ë©° íê° ë¹ ëê¹ì§ ë§ì´í¬ë¡íì¤í¬ ì²ë¦¬ë ë©ì¶ì§ ì기 ë문ì, ì´ë²¤í¸ 루íê° ëìë ë§ì´í¬ë¡íì¤í¬ ì²ë¦¬ 루íì ë¹ ì§ íì¤ì ì¸ ìíì´ ììµëë¤. ì¬ê·ì ì¼ë¡ ë§ì´í¬ë¡íì¤í¬ë¥¼ ì¶ê°í ë 주ìíì¸ì.
ë§ì´í¬ë¡íì¤í¬ ì¬ì©í기ì¬ê¸°ì ë ëìê°ê¸° ì ì, ëë¶ë¶ì ê°ë°ìë ë§ì´í¬ë¡íì¤í¬ë¥¼ ê±°ì, ìë§ë ì í, ì¬ì©íì§ ìì ê²ìì ì기íë ê²ì´ ì¢ìµëë¤. ë§ì´í¬ë¡íì¤í¬ë íë ë¸ë¼ì°ì ê¸°ë° JavaScript ê°ë°ìì ê³ ëë¡ í¹íë 기ë¥ì¼ë¡ì, ì¬ì©ì ì»´í¨í°ìì ë°ìí ìë§ì ê²ë¤ì ììì ë¤ë¥¸ ê²ë³´ë¤ ì°ì í´ì ì¤íí ì½ë를 ìì½í ì ìë 기ë¥ì ëë¤. ì´ ë¥ë ¥ì ë¨ì©íë©´ ì±ë¥ 문ì ì ë¹ ì§ ê²ì ëë¤.
ë§ì´í¬ë¡íì¤í¬ íì ë£ê¸°ë°ë¼ì, ë§ì´í¬ë¡íì¤í¬ì ì¬ì©ì ë¤ë¥¸ í´ê²°ì±
ì´ ì í ìê±°ë, íë ììí¬ ëë ë¼ì´ë¸ë¬ë¦¬ìì 구ííê³ ì íë 기ë¥ì íìí ê²½ì°ìë§ ì¬ì©í´ì¼ í©ëë¤. 과거ìë ë§ì´í¬ë¡íì¤í¬ë¥¼ íì ì¶ê°íë ì°í ë°©ë²ì´ (ì¦ì ì´ííë íë¡ë¯¸ì¤ ìì±ì²ë¼) ìì§ë ììì¼ë, queueMicrotask()
ë©ìëì ì¶ê° ëë¶ì ë§ì´í¬ë¡íì¤í¬ë¥¼ ìì íê³ ì°í ìì´ ì¶ê°í ì ìë íì¤ ë°©ë²ì´ ìê²¼ìµëë¤.
queueMicrotask()
를 ì¬ì©íë©´ íë¡ë¯¸ì¤ë¥¼ ì¬ì©í´ ë§ì´í¬ë¡íì¤í¬ë¥¼ ìì±í ë ë§ì£¼ì¹ë 문ì ìì ë²ì´ë ì ììµëë¤. ì컨ë íë¡ë¯¸ì¤ ë°©ë²ììë ì½ë°±ìì ìì¸ê° ë°ìí ê²½ì° íì¤ ìì¸ê° ìëë¼ ê±°ë¶ë íë¡ë¯¸ì¤ë¡ ëíë곤 íìµëë¤. ëí íë¡ë¯¸ì¤ì ìì±ê³¼ íê´´ë ìê°ê³¼ ë©ëª¨ë¦¬ ì쪽ì ì¶ê° ë¶í를 줬ìµëë¤.
íì¬ ë§¥ë½ì´ ë§ì´í¬ë¡íì¤í¬ë¥¼ ì²ë¦¬íë ìì ì í¸ì¶í JavaScript Function
ì queueMicrotask()
ë©ìëì 매ê°ë³ìë¡ ì ê³µíì¸ì. queueMicrotask()
ë íì¬ ì¤í ë§¥ë½ì ë°ë¼ Window
ëë Worker
ì ì ë§¥ë½ì ë
¸ì¶ëì´ ììµëë¤.
queueMicrotask(() => {
/* ë§ì´í¬ë¡íì¤í¬ìì ì¤íí ì½ë */
});
ë§ì´í¬ë¡íì¤í¬ í¨ì ìì²´ë 매ê°ë³ì를 ë°ì§ ìì¼ë©° ì무ê²ë ë°ííì§ ììµëë¤.
ë§ì´í¬ë¡íì¤í¬ë¥¼ ì¬ì©í´ì¼ í ëì´ êµ¬íììë ë§ì´í¬ë¡íì¤í¬ê° í¹í ì ì©í ìí©ì ì´í´ë³´ê² ìµëë¤. ë³´íµ JavaScript ì¤í ë§¥ë½ì 주 ë³¸ë¬¸ì´ ì¢ ë£ëì¼ë ë¤ë¥¸ 모ë ì´ë²¤í¸ ì²ë¦¬ê¸°, íìììê³¼ ì¸í°ë², 기í ì½ë°±ì´ í¸ì¶ë기 ì ì 결과를 í¬ì°© ëë ê²ì¦íê±°ë ì 리 ìì ë±ì ìííë ìí©ì ëë¤.
ì´ê² ì´ë¤ ëì ì ì©í ê²ì¼ê¹ì?
ë§ì´í¬ë¡íì¤í¬ë¥¼ ì¬ì©íë 주ì ì´ì ë ë°ë¡ ê²°ê³¼ë ë°ì´í°ê° ë기ì ì¼ë¡ ì¬ì© ê°ë¥íëë¼ë íì¤í¬ ììì ì¼ê´ì±ì ì ì§íê³ , ëìì ì¬ì©ìê° ì¸ì§í ì ìë ìì¤ì ì°ì° ì§ì°ì ì¤ì´ë ê²ì ììµëë¤.
ì¡°ê±´ì íë¡ë¯¸ì¤ ì¬ì©ì ìì´ ì¤í ìì ì ì§ë§ì´í¬ë¡íì¤í¬ë¥¼ ì¬ì©í´ ì¤í ìì를 íì ì¼ì íê² ì ì§í ì ìë ìí©ì if...else
ì ì¸ë¬¸ (ëë ë¤ë¥¸ ì¡°ê±´ ì ì¸ë¬¸) ì¤ í ì ììë§ íë¡ë¯¸ì¤ë¥¼ ì¬ì©íê³ , ë¤ë¥¸ ì ììë ì¬ì©íì§ ìë ê²ì
ëë¤. ë¤ìê³¼ ê°ì ì½ë를 ê³ ë ¤í´ë³´ê² ìµëë¤.
customElement.prototype.getData = (url) => {
if (this.cache[url]) {
this.data = this.cache[url];
this.dispatchEvent(new Event("load"));
} else {
fetch(url)
.then((result) => result.arrayBuffer())
.then((data) => {
this.cache[url] = data;
this.data = data;
this.dispatchEvent(new Event("load"));
});
}
};
ì ì½ëìì ë°ìíë 문ì ë if...else
ì ì¸ë¬¸ì í ë¶ê¸°(ìììë ì´ë¯¸ì§ê° ìºìì ë¤ì´ìì ë)ììë íì¤í¬ë¥¼ ì¬ì©íê³ , else
ì ììë íë¡ë¯¸ì¤ë¥¼ ì¬ì©í기 ë문ì ì¤í ììê° ë¬ë¼ì§ ì ìë¤ë ì ì
ëë¤.
element.addEventListener("load", () => console.log("Loaded data"));
console.log("Fetching data...");
element.getData();
console.log("Data fetched");
ì ì½ë를 ë ë² ì°ìí´ì ì¤ííë©´ ë¤ìê³¼ ê°ì ê²°ê³¼ê° ëíë©ëë¤.
ë°ì´í°ê° ìì§ ìºìì ìì ë,
Fetching data... Data fetched Loaded data
ë°ì´í°ê° ìºìì ì ì¥ë íìë,
Fetching data... Loaded data Data fetched
ë ëì ì ì, ì´ ì½ëì ì¤íì´ ëë í ì´ë¤ ëìë ììì data
ìì±ì´ ì¤ì ë ìíê³ , ë¤ë¥¸ ëìë ìë ê²ì´ë¼ë ì ì
ëë¤.
if
ì ìì ë§ì´í¬ë¡íì¤í¬ë¥¼ ì¬ì©í´ ë ì ì ê· íì ë§ì¶°ì£¼ë ë°©ë²ì¼ë¡ íì ê°ì ì¤í ìì를 ì ì§í ì ììµëë¤.
customElement.prototype.getData = (url) => {
if (this.cache[url]) {
queueMicrotask(() => {
this.data = this.cache[url];
this.dispatchEvent(new Event("load"));
});
} else {
fetch(url)
.then((result) => result.arrayBuffer())
.then((data) => {
this.cache[url] = data;
this.data = data;
this.dispatchEvent(new Event("load"));
});
}
};
ìì ìì ë ì½ëììë ë ë¶ê¸° 모ë data
ìì± ì¤ì ê³¼ load
ì´ë²¤í¸ ë°ìì ë§ì´í¬ë¡íì¤í¬ ììì ì²ë¦¬íì¬ ìë¡ì ê· íì ë§ì·ìµëë¤. (if
ììë queueMicrotask()
ë¡, else
ììë fetch
ì íë¡ë¯¸ì¤ë¡)
ë§ì´í¬ë¡íì¤í¬ë¥¼ ì¬ì©íë©´ ë¤ìí ì¶ì²ë¡ë¶í°ì ë¤ìì ìì²ì íëì ë°°ì¹ë¡ 묶ì´ì, ê°ì ì íì ìì ì ìí ë°ë³µì ì¸ í¸ì¶ë¡ ì¸í´ ë°ìí ì ìë ë¶í를 í¼í ì ììµëë¤.
ë¤ì ì½ë ì¡°ê°ì ë¤ìì ë©ìì§ë¥¼ ë°°ì´ì ë£ê³ , ë§ì´í¬ë¡íì¤í¬ë¥¼ ì¬ì©í´ì ì¤í 컨í ì¤í¸ ì¢ ë£ ì ë£ì´ë¨ë 모ë ë©ìì§ë¥¼ í ë²ì íëì ê°ì²´ë¡ ì ì¡íë 모ìµì ë³´ì ëë¤.
const messageQueue = [];
let sendMessage = (message) => {
messageQueue.push(message);
if (messageQueue.length === 1) {
queueMicrotask(() => {
const json = JSON.stringify(messageQueue);
messageQueue.length = 0;
fetch("url-of-receiver", json);
});
}
};
sendMessage()
를 í¸ì¶íë©´ 주ì´ì§ ë©ìì§ë ì°ì ë©ìì§ í ë°°ì´ì ë¤ì´ê°ëë¤. ê·¸ íì ì¬ë°ë ì¼ì´ ìê¹ëë¤.
ë°©ê¸ ë°°ì´ì ì¶ê°í ë©ìì§ê° 첫 ë©ìì§ë¼ë©´ sendMessage()
ë ë©ìì§ ì ì¡ ë°°ì¹ë¥¼ ìì½í©ëë¤. ë§ì´í¬ë¡íì¤í¬ë ì¸ì ë ê·¸ë ë¯ JavaScript ì¤í ê²½ë¡ê° ì½ë°±ì í¸ì¶í기 ë°ë¡ ì§ì ì¸, ìµìì ë¨ê³ì ëë¬íë©´ ì¤íë©ëë¤. ë°ë¼ì sendMessage()
ì íì í¸ì¶ì ë©ìì§ë¤ì ë©ìì§ ë기ì´ìë ë£ê² ì§ë§, ë§ì´í¬ë¡íì¤í¬ ì¶ê° ì ì ìííë ë°°ì´ ê¸¸ì´ ê²ì¬ë¡ ì¸í´ ìë¡ì´ ë§ì´í¬ë¡íì¤í¬ê° íì ì¶ê°ëì§ë ììµëë¤.
ë§ì¹¨ë´ ë§ì´í¬ë¡íì¤í¬ ì¤í ìì ì´ ì¤ë©´ ìë§ ì ì¡ì 기ë¤ë¦¬ë ë§ì ìì ë©ìì§ê° ë기 ì¤ì¼ ê²ì
ëë¤. ë§ì´í¬ë¡íì¤í¬ë ì°ì JSON.stringify()
를 ì¬ì©í´ ë©ìì§ë¥¼ JSONì¼ë¡ ì¸ì½ë©í©ëë¤. ê·¸ í ë°°ì´ì ì½í
ì¸ ë íìíì§ ìì¼ë¯ë¡ messageQueue
ë°°ì´ì ë¹ìëë¤. ë§ì§ë§ì¼ë¡ fetch()
ë©ìë를 ì¬ì©í´ ìë²ë¡ JSON 문ìì´ì ì ì¡í©ëë¤.
ì´ë¥¼ íµí´ ì´ë²¤í¸ 루íì ê°ì 주기 ë´ìì ìíí sendMessage()
ë¤ìì í¸ì¶ì íëì fetch()
ì°ì°ì 모ì´ê² ëê³ , íìììê³¼ ê°ì ë¤ë¥¸ íì¤í¬ë, í¹ì íµì ì ì§ì°ìí¤ë ì¼ì í¼í ì ìììµëë¤.
ìë²ë JSON 문ìì´ì ë°ì í ìë§ ë¬¸ìì´ì ëì½ë©í ê²°ê³¼ ë°°ì´ì ì¬ì©í´ ìì ë©ìì§ë¥¼ ì²ë¦¬í ê²ì ëë¤.
ìì ê°ë¨í ë§ì´í¬ë¡íì¤í¬ ìì ë¤ìì ê°ë¨í ìì ììë, íì ì¶ê°í ë§ì´í¬ë¡íì¤í¬ì ì½ë°±ì ìµìì ì¤í¬ë¦½í¸ì ëìì´ ëë í ì¤íëë¤ë ê²ì ë³´ì ëë¤.
JavaScriptlet logElem = document.getElementById("log");
let log = (s) => (logElem.innerHTML += s + "<br>");
ì´ì´ì§ë ì½ëìì queueMicrotask()
를 ì¬ì©í´ ì¤íí ë§ì´í¬ë¡íì¤í¬ë¥¼ ìì½íë ê²ì ë³¼ ì ììµëë¤. ìë¤ë¡ë log()
í¸ì¶ì ë°°ì¹íëë°, íë©´ì í
ì¤í¸ë¥¼ ì¶ë ¥íë í¨ìì
ëë¤.
log("ë§ì´í¬ë¡íì¤í¬ ì¶ê° ì ");
queueMicrotask(() => {
log("ë§ì´í¬ë¡íì¤í¬ë¥¼ ì¤ííìµëë¤.");
});
log("ë§ì´í¬ë¡íì¤í¬ ì¶ê° í");
ê²°ê³¼ íìììê³¼ ë§ì´í¬ë¡íì¤í¬ ìì
ì´ ìì ììë 0ë°ë¦¬ì´ì íììì("ìµëí ë¹ ë¥´ê²")ì ìì½í©ëë¤. ì¬ê¸°ì íì¸í ì ìë ê²ì (setTimeout()
ë±ì ì¬ì©í´) íì¤í¬ë¥¼ ìì±í ëì "ìµëí ë¹ ë¥´ê²"ì, ë§ì´í¬ë¡íì¤í¬ììì "ìµëí ë¹ ë¥´ê²"ë ë¤ë¥´ë¤ë ì ì
ëë¤.
let logElem = document.getElementById("log");
let log = (s) => (logElem.innerHTML += s + "<br>");
ì´ì´ì§ë ì½ëìì queueMicrotask()
를 ì¬ì©í´ ì¤íí ë§ì´í¬ë¡íì¤í¬ë¥¼ ìì½íë ê²ì ë³¼ ì ììµëë¤. ê·¸ ìììë íìììì 0ms í ë°ëíëë¡ ìì½í©ëë¤. ìë¤ë¡ë log()
í¸ì¶ì ë°°ì¹íëë°, íë©´ì í
ì¤í¸ë¥¼ ì¶ë ¥íë í¨ìì
ëë¤.
let callback = () => log("ì¼ë° íììì ì½ë°±ì ì¤ííìµëë¤.");
let urgentCallback = () => log("*** ì! ê¸´ê¸ ì½ë°±ì ì¤ííìµëë¤!");
log("주 íë¡ê·¸ë¨ ìì");
setTimeout(callback, 0);
queueMicrotask(urgentCallback);
log("주 íë¡ê·¸ë¨ ì¢
ë£");
ê²°ê³¼
ê²°ê³¼ì íë¡ê·¸ë¨ 본문 ì½ëì ì¶ë ¥ì´ 먼ì ëíëê³ , ê·¸ ë¤ë¥¼ ì´ì´ ë§ì´í¬ë¡íì¤í¬, ë§ì§ë§ì¼ë¡ íììì ì½ë°±ì´ ì¶ë ¥íë ê²ì 주목íì¸ì. 주 íë¡ê·¸ë¨ì ì¤íì ë§¡ì íì¤í¬ê° ì¢ ë£ë í, íì¤í¬ íì ì¬ë¼ê° íììì ì½ë°± íì¤í¬ë¥¼ ì²ë¦¬í기 ì ì ë§ì´í¬ë¡íì¤í¬ í를 ì°ì ì²ë¦¬í기 ë문ì ëë¤. íì¤í¬ì ë§ì´í¬ë¡íì¤í¬ íê° ë³ëë¡ ê´ë¦¬ëë¤ë ê², ê·¸ë¦¬ê³ ë§ì´í¬ë¡íì¤í¬ê° íì¤í¬ë³´ë¤ 먼ì ì¤íëë¤ë ê²ì 기ìµíë©´ ì¢ìµëë¤.
í¨ììì ì¶ê°í ë§ì´í¬ë¡íì¤í¬ì´ ìì ë ì´ì ìì 를 ì½ê° íì¥í´, queueMicrotask()
ë¡ ë§ì´í¬ë¡íì¤í¬ë¥¼ ìì½í í 모ì¢
ì ê³ì° ìì
ì ìííë í¨ì를 ì¬ì©í©ëë¤. ì¬ê¸°ì íì¸í´ì¼ í ê²ì ë§ì´í¬ë¡íì¤í¬ì ì¤í ìì ì´ í¨ìì ì¢
ë£ ìê°ì´ ìëê³ ì£¼ íë¡ê·¸ë¨ì ì¢
ë£ ìì ì´ë¼ë ì ì
ëë¤.
let logElem = document.getElementById("log");
let log = (s) => (logElem.innerHTML += s + "<br>");
주 íë¡ê·¸ë¨ ì½ëë ë¤ìê³¼ ê°ìµëë¤. doWork()
í¨ìê° queueMicrotask()
를 í¸ì¶íì§ë§, íì¤í¬ê° ì¢
ë£ëì´ ì¤í ì¤íì ì무ê²ë ë¨ì§ ìì ìíê° ëë, ì¦ ì ì²´ íë¡ê·¸ë¨ ì¤íì´ ì¢
ë£ë기 ì ê¹ì§ ì´ ë§ì´í¬ë¡íì¤í¬ë ì²ë¦¬ëì§ ìë ê²ì ê²°ê³¼ìì ë³¼ ì ììµëë¤.
let callback = () => log("ì¼ë° íììì ì½ë°±ì ì¤ííìµëë¤.");
let urgentCallback = () => log("*** ì! ê¸´ê¸ ì½ë°±ì ì¤ííìµëë¤!");
let doWork = () => {
let result = 1;
queueMicrotask(urgentCallback);
for (let i = 2; i <= 10; i++) {
result *= i;
}
return result;
};
log("주 íë¡ê·¸ë¨ ìì");
setTimeout(callback, 0);
log(`10!ì ${doWork()}ê³¼ ê°ìµëë¤.`);
log("주 íë¡ê·¸ë¨ ì¢
ë£");
ê²°ê³¼ ê°ì´ 보기
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4