å½ä½ å¨è°è¯ï¼æè å¨å³å®å¦ä½ä»¥æä½³çæ¹å¼ä¸ºä»»å¡éåå微任å¡éå宿è°åº¦é¡ºåºçæ¶åï¼å¦æä½ äºè§£å ³äº JavaScript è¿è¡æ¶æ¯å¦ä½å¨èåæ§è¡è¿ä¸åçï¼é£å°å¯¹ä½ ççè§£ä¼é常æå¸®å©ã
JavaScript æ¬è´¨ä¸æ¯ä¸é¨å线ç¨è¯è¨ã对äºå¨å®è¢«è®¾è®¡åºæ¥çé£ä¸ªå¹´ä»£æ¥è¯´ï¼è¿æ ·ç设计æ¯ä¸ä¸ªå¾å¥½çéæ©ãé£ä¸ªæ¶åç人们å¾å°æå¤å¤çå¨è®¡ç®æºï¼èä¸å½æ¶é¢æç± JavaScript å¤çç代ç éä¹ç¸å¯¹è¾å°ã
å½ç¶ï¼éçæ¶é´çæµéï¼è®¡ç®æºå·²ç»åå±æä¸ºå¼ºå¤§ç夿 ¸ç³»ç»ï¼è JavaScript å·²ç»æä¸ºè®¡ç®ä¸çä¸ä½¿ç¨æå¹¿æ³çè¯è¨ä¹ä¸ã大鿿µè¡çåºç¨ç¨åºè³å°æä¸é¨åæ¯åºäº JavaScript 代ç çãä¸ºäºæ¯æè¿ä¸ç¹ï¼æå¿ è¦æ¾å°æ¹æ³è®©é¡¹ç®æè±å线ç¨è¯è¨çéå¶ã
èªä»å®æ¶å¨ï¼setTimeout()
å setInterval()
ï¼å å
¥å° Web API åï¼æµè§å¨æä¾ç JavaScript ç¯å¢å°±å·²ç»éæ¸åå±å°å
å«ä»»å¡è°åº¦ãå¤çº¿ç¨åºç¨å¼åç强大çç¹æ§ãäºè§£ JavaScript è¿è¡æ¶æ¯å¦ä½å®æåè¿è¡ä»£ç ç对äºè§£ queueMicrotask()
ä¼é常æä½ç¨ã
夿³¨ï¼ 对äºå¤§å¤æ° JavaScript å¼åäººåæ¥è¯´ï¼è¿äºç»èå¹¶ä¸éè¦ãè¿éæä¾çä¿¡æ¯åªç¨äºäºè§£ä¸ºä»ä¹å¾®ä»»å¡é常æç¨ä»¥åå®ä»¬æ¯å¦ä½å·¥ä½çãå¦æä½ å¹¶ä¸å ³å¿è¿äºå 容ï¼ä½ å¯ä»¥è·³è¿è¿é¨åæè å¨ä½ è§å¾éè¦çæ¶ååå忥æ¥çã
å½ä¸æ®µ JavaScript 代ç å¨è¿è¡çæ¶åï¼å®å®é 䏿¯è¿è¡å¨æ§è¡ä¸ä¸æä¸ãä¸é¢ 3 ç§ç±»åç代ç ä¼å建ä¸ä¸ªæ°çæ§è¡ä¸ä¸æï¼
eval()
彿°ä¹ä¼å建ä¸ä¸ªæ°çæ§è¡ä¸ä¸æãæ¯ä¸ä¸ªä¸ä¸æå¨æ¬è´¨ä¸é½æ¯ä¸ç§ä½ç¨åå±çº§ãæ¯ä¸ªä»£ç 段å¼å§æ§è¡çæ¶åé½ä¼å建ä¸ä¸ªæ°çä¸ä¸ææ¥è¿è¡å®ï¼å¹¶ä¸å¨ä»£ç éåºçæ¶å鿝æãççä¸é¢è¿æ®µ JavaScript ç¨åºï¼
let outputElem = document.getElementById("output");
let userLanguages = {
Mike: "en",
Teresa: "es",
};
function greetUser(user) {
function localGreeting(user) {
let greeting;
let language = userLanguages[user];
switch (language) {
case "es":
greeting = `¡Hola, ${user}!`;
break;
case "en":
default:
greeting = `Hello, ${user}!`;
break;
}
return greeting;
}
outputElem.innerHTML += `${localGreeting(user)}<br>\r`;
}
greetUser("Mike");
greetUser("Teresa");
greetUser("Veronica");
è¿æ®µç¨åºä»£ç å å«äºä¸ä¸ªæ§è¡ä¸ä¸æï¼å ¶ä¸æäºä¼å¨ç¨åºè¿è¡çè¿ç¨ä¸å¤æ¬¡å建åéæ¯ãæ¯ä¸ªä¸ä¸æåå»ºçæ¶åä¼è¢«æ¨å ¥æ§è¡ä¸ä¸ææ ãå½éåºçæ¶åï¼å®ä¼ä»ä¸ä¸ææ ä¸ç§»é¤ã
ç¨åºå¼å§è¿è¡æ¶ï¼å ¨å±ä¸ä¸æå°±ä¼è¢«å建好ã
彿§è¡å° greetUser("Mike")
çæ¶åï¼ä¼ä¸º greetUser()
彿°å建ä¸ä¸ªå®çä¸ä¸æãè¿ä¸ªæ§è¡ä¸ä¸æä¼è¢«æ¨å
¥æ§è¡ä¸ä¸ææ ä¸ã
greetUser()
è°ç¨ localGreeting()
çæ¶åï¼ä¼ä¸ºè¯¥æ¹æ³å建ä¸ä¸ªæ°çä¸ä¸æãå½ localGreeting()
è¿åçæ¶åï¼å®çä¸ä¸æä¹ä¼ä»æ§è¡æ ä¸å¼¹åºå¹¶éæ¯ãç¨åºä¼ä»æ ä¸è·åä¸ä¸ä¸ªä¸ä¸æå¹¶æ¢å¤æ§è¡ï¼ä¹å°±æ¯ä» greetUser()
å©ä¸çé¨åå¼å§æ§è¡ãgreetUser()
æ§è¡å®æ¯å¹¶éåºï¼å
¶ä¸ä¸æä¹ä»æ ä¸å¼¹åºå¹¶éæ¯ã彿§è¡å° greetUser("Teresa")
çæ¶åï¼ç¨åºåä¼ä¸ºå®å建ä¸ä¸ªä¸ä¸æå¹¶æ¨å
¥æ é¡¶ã
greetUser()
è°ç¨ localGreeting()
çæ¶åï¼ä¼ä¸ºè¯¥æ¹æ³å建ä¸ä¸ªæ°çä¸ä¸æãå½ localGreeting()
è¿åçæ¶åï¼å®çä¸ä¸æä¹ä¼ä»æ§è¡æ ä¸å¼¹åºå¹¶éæ¯ãç¶åï¼ç»§ç»æ§è¡ greetUser()
å©ä¸çé¨åãgreetUser()
æ§è¡å®æ¯å¹¶éåºï¼å
¶ä¸ä¸æä¹ä»æ ä¸å¼¹åºå¹¶éæ¯ã彿§è¡å° greetUser("Veronica")
çæ¶åï¼ç¨åºåä¼ä¸ºå®å建ä¸ä¸ªä¸ä¸æå¹¶æ¨å
¥æ é¡¶ã
greetUser()
è°ç¨ localGreeting()
çæ¶åï¼ä¼ä¸ºè¯¥æ¹æ³å建ä¸ä¸ªæ°çä¸ä¸æãå½ localGreeting()
è¿åçæ¶åï¼å®çä¸ä¸æä¹ä¼ä»æ§è¡æ ä¸å¼¹åºå¹¶éæ¯ãgreetUser()
æ§è¡å®æ¯å¹¶éåºï¼å
¶ä¸ä¸æä¹ä»æ ä¸å¼¹åºå¹¶éæ¯ã主ç¨åºéåºï¼å ¨å±æ§è¡ä¸ä¸æä»æ§è¡æ ä¸å¼¹åºãæ¤æ¶æ 䏿æçä¸ä¸æé½å·²ç»å¼¹åºï¼ç¨åºæ§è¡å®æ¯ã
éè¿è¿ç§æ¹å¼æ¥ä½¿ç¨æ§è¡ä¸ä¸æï¼æ¯ä¸ªç¨åºå彿°é½è½å¤æ¥æèªå·±çåéåå ¶ä»å¯¹è±¡ãæ¯ä¸ªä¸ä¸æè¿è½å¤é¢å¤çè·è¸ªç¨åºä¸ä¸ä¸è¡éè¦æ§è¡ç代ç 以åä¸äºå¯¹ä¸ä¸æé常éè¦çä¿¡æ¯ãéè¿è¿ç§æ¹å¼æ¥ä½¿ç¨ä¸ä¸æåä¸ä¸ææ ï¼æä»¬å¯ä»¥å¯¹ç¨åºè¿è¡çä¸äºåºç¡é¨åè¿è¡ç®¡çï¼å æ¬å±é¨åå ¨å±åéã彿°çè°ç¨ä¸è¿åçã
å ³äºéå½å½æ°ï¼å³å¤æ¬¡è°ç¨èªèº«ç彿°ï¼ï¼éè¦ç¹å«æ³¨æï¼æ¯æ¬¡éå½è°ç¨èªèº«é½ä¼å建ä¸ä¸ªæ°çä¸ä¸æãè¿ä½¿å¾ JavaScript è¿è¡æ¶è½å¤è¿½è¸ªéå½çå±çº§ä»¥åä»éå½ä¸å¾å°çè¿åå¼ï¼ä½è¿ä¹æå³çæ¯æ¬¡éå½é½ä¼æ¶èå 忥å建æ°çä¸ä¸æã
JavaScript è¿è¡æ¶å¨æ§è¡ JavaScript 代ç çæ¶åï¼JavaScript è¿è¡æ¶å®é ä¸ç»´æ¤äºä¸ç»ç¨äºæ§è¡ JavaScript 代ç ç代çãæ¯ä¸ªä»£çç±ä¸ç»æ§è¡ä¸ä¸æçéåãæ§è¡ä¸ä¸ææ ã主线ç¨ãä¸ç»å¯è½å建ç¨äºæ§è¡ worker çé¢å¤ç线ç¨éåãä¸ä¸ªä»»å¡éå以åä¸ä¸ªå¾®ä»»å¡éåææãé¤äºä¸»çº¿ç¨ï¼æäºæµè§å¨å¨å¤ä¸ªä»£çä¹é´å ±äº«ç主线ç¨ï¼ä¹å¤ï¼å ¶ä»ç»æé¨å对该代ç齿¯å¯ä¸çã
ç°å¨æä»¬æ¥æ´å 详ç»çäºè§£ä¸ä¸è¿è¡æ¶æ¯å¦ä½å·¥ä½çã
äºä»¶å¾ªç¯æ¯ä¸ªä»£ç齿¯ç±äºä»¶å¾ªç¯ï¼Event loopï¼é©±å¨çï¼äºä»¶å¾ªç¯è´è´£æ¶éäºä»¶ï¼å æ¬ç¨æ·äºä»¶ä»¥åå ¶ä»éç¨æ·äºä»¶çï¼ã对任å¡è¿è¡æé以便å¨åéçæ¶åæ§è¡åè°ãç¶å宿§è¡ææå¤äºçå¾ ä¸ç JavaScript ä»»å¡ï¼ç¶åæ¯å¾®ä»»å¡ï¼ç¶åå¨å¼å§ä¸ä¸æ¬¡å¾ªç¯ä¹åæ§è¡ä¸äºå¿ è¦ç渲æåç»å¶æä½ã
ç½é¡µæè app ç代ç åæµè§å¨æ¬èº«çç¨æ·çé¢ç¨åºè¿è¡å¨ç¸åç线ç¨ä¸ï¼å ±äº«ç¸åçäºä»¶å¾ªç¯ã该线ç¨å°±æ¯ä¸»çº¿ç¨ï¼å®é¤äºè¿è¡ç½é¡µæ¬èº«ç代ç ä¹å¤ï¼è¿è´è´£æ¶éåæ´¾åç¨æ·åå ¶ä»äºä»¶ï¼ä»¥å渲æåç»å¶ç½é¡µå 容çã
äºä»¶å¾ªç¯é©±å¨çæµè§å¨ä¸åççä¸åï¼å 为å®ä¸ç¨æ·çäº¤äºæå ³ï¼ä½å¯¹äºæä»¬è¿éçç®çæ¥è¯´ï¼æ´éè¦çæ¯å®è´è´£è°åº¦åæ§è¡å¨å ¶çº¿ç¨ä¸è¿è¡çæ¯ä¸æ®µä»£ç ã
æå¦ä¸ä¸ç§äºä»¶å¾ªç¯ï¼
window äºä»¶å¾ªç¯é©±å¨ææå ±äº«åæºççªå£ï¼å°½ç®¡è¿æè¿ä¸æ¥çéå¶ï¼å¦ä¸æè¿°ï¼ã
worker äºä»¶å¾ªç¯é©±å¨ worker çäºä»¶å¾ªç¯ãè¿å æ¬ææå½¢å¼ç workerï¼å æ¬åºæ¬ç web workerãshared worker å service workerãWorker 被ä¿åå¨ä¸ä¸ªæå¤ä¸ªä¸â主â代ç åå¼ç代çä¸ï¼æµè§å¨å¯ä»¥å¯¹ææç¹å®ç±»åçå·¥ä½è 使ç¨ä¸ä¸ªäºä»¶å¾ªç¯ï¼ä¹å¯ä»¥ä½¿ç¨å¤ä¸ªäºä»¶å¾ªç¯æ¥å¤çå®ä»¬ã
worklet äºä»¶å¾ªç¯é©±å¨è¿è¡ worklet ç代çãè¿å
å«äº Worklet
ãAudioWorklet
以å PaintWorklet
ã
å¤ä¸ªåæºçªå£å¯è½è¿è¡å¨ç¸åçäºä»¶å¾ªç¯ä¸ï¼æ¯ä¸ªéåä»»å¡è¿å ¥å°äºä»¶å¾ªç¯ä¸ä»¥ä¾¿å¤çå¨è½å¤è½®æµå¯¹å®ä»¬è¿è¡å¤çãè®°ä½è¿éçç½ç»æ¯è¯âwindowâå®é ä¸æçæ¯âç¨äºè¿è¡ç½é¡µå å®¹çæµè§å¨çº§å®¹å¨âï¼å æ¬å®é ç windowãæ ç¾é¡µæè ä¸ä¸ª frameã
å¨ç¹å®æ åµä¸ï¼åæºçªå£ä¹é´å ±äº«äºä»¶å¾ªç¯ï¼ä¾å¦ï¼
<iframe>
ä¸ç容å¨ï¼åå®å¯è½ä¼åå
å«å®ççªå£å
±äº«ä¸ä¸ªäºä»¶å¾ªç¯ãè¿ç§ç¹å®æ åµä¾èµäºæµè§å¨çå ·ä½å®ç°ï¼å个æµè§å¨å¯è½å¹¶ä¸ä¸æ ·ã
ä»»å¡ vs 微任å¡ä¸ä¸ªä»»å¡å°±æ¯æè®¡åç±æ åæºå¶æ¥æ§è¡çä»»ä½ JavaScriptï¼å¦ç¨åºçåå§åãäºä»¶è§¦åçåè°çãé¤äºä½¿ç¨äºä»¶ï¼ä½ è¿å¯ä»¥ä½¿ç¨ setTimeout()
æè
setInterval()
æ¥æ·»å ä»»å¡ã
ä»»å¡éåå微任å¡éåçåºå«å¾ç®åï¼ä½å´å¾éè¦ï¼
ç±äºä½ ç代ç åæµè§å¨çç¨æ·çé¢è¿è¡å¨åä¸ä¸ªçº¿ç¨ä¸ï¼å ±äº«åä¸ä¸ªäºä»¶å¾ªç¯ï¼åå¦ä½ ç代ç é»å¡äºæè è¿å ¥äºæ é循ç¯ï¼åæµè§å¨å°ä¼å¡æ»ãæ 论æ¯ç±äº bug å¼èµ·è¿æ¯ä»£ç ä¸è¿è¡å¤æçè¿ç®å¯¼è´çæ§è½éä½ï¼é½ä¼éä½ç¨æ·çä½éªã
彿¥èªå¤ä¸ªç¨åºçå¤ä¸ªä»£ç 对象å°è¯åæ¶è¿è¡çæ¶åï¼ä¸åé½å¯è½åå¾å¾æ ¢çè³è¢«é»å¡ï¼æ´ä¸è¦è¯´æµè§å¨è¿éè¦æ¶é´æ¥æ¸²æåç»å¶ç½ç«å UIãå¤çç¨æ·äºä»¶çã
è§£å³æ¹æ¡ä½¿ç¨ web worker å¯ä»¥è®©ä¸»çº¿ç¨å¦èµ·æ°ççº¿ç¨æ¥è¿è¡èæ¬ï¼è¿è½å¤ç¼è§£ä¸é¢çæ åµãä¸ä¸ªè®¾è®¡è¯å¥½çç½ç«æåºç¨ä¼æä¸äºå¤æçæè èæ¶çæä½äº¤ç» worker å»åï¼è¿æ ·å¯ä»¥è®©ä¸»çº¿ç¨é¤äºæ´æ°ãå¸å±å渲æç½é¡µä¹å¤ï¼å°½å¯è½å°çå»åå ¶ä»äºæ ã
éè¿ä½¿ç¨å promise è¿æ ·ç弿¥ JavaScript ææ¯å¯ä»¥ä½¿å¾ä¸»çº¿ç¨å¨çå¾ è¯·æ±è¿åç»æçåæ¶ç»§ç»å¾ä¸æ§è¡ï¼è¿è½å¤æ´è¿ä¸æ¥åè½»ä¸é¢æå°çæ åµãç¶èï¼ä¸äºæ´æ¥è¿äºåºç¡åè½ç代ç ââæ¯å¦ä¸äºæ¡æ¶ä»£ç ï¼å¯è½æ´éè¦å°ä»£ç 宿å¨ä¸»çº¿ç¨ä¸ä¸ä¸ªå®å ¨çæ¶é´æ¥è¿è¡ï¼å®ä¸ä»»ä½è¯·æ±çç»ææè 任塿 å ³ã
微任塿¯å¦ä¸ç§è§£å³è¯¥é®é¢çæ¹æ¡ï¼éè¿å°ä»£ç 宿å¨ä¸ä¸æ¬¡äºä»¶å¾ªç¯å¼å§ä¹åè¿è¡è䏿¯å¿ é¡»è¦çå°ä¸ä¸æ¬¡å¼å§ä¹åææ§è¡ï¼è¿æ ·å¯ä»¥æä¾ä¸ä¸ªæ´å¥½ç访é®çº§å«ã
微任å¡éåå·²ç»å卿䏿®µæ¶é´äºï¼ä½ä¹åå®ä»
ä»
被å
é¨ä½¿ç¨æ¥é©±å¨è¯¸å¦ promise è¿äºä»»å¡ãqueueMicrotask()
çå å
¥å¯ä»¥è®©å¼åè
å建ä¸ä¸ªç»ä¸ç微任å¡éåï¼å¨ä»»ä½éè¦æè½å宿代ç å¨ JavaScript æ§è¡ä¸ä¸ææ 䏿²¡ææ§è¡ä¸ä¸ææ¶å®å
¨è¿è¡çå°æ¹ä½¿ç¨ãå¨å¤ä¸ªå®ä¾ãæµè§å¨å JavaScript è¿è¡æ¶ä¸ï¼æ ååçå¾®éåæºå¶æå³çè¿äºå¾®ä»»å¡å°ä»¥ç¸åç顺åºå¯é å°è¿è¡ï¼ä»èé¿å
æ½å¨çé¾ä»¥åç°çé误ã
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