JavaScript æ§è¡æ¨¡å
æ¬é¡µä»ç» JavaScript è¿è¡æ¶ç¯å¢çåºæ¬æ¶æã该模åä¸»è¦æ¯ç论æ§çãæ½è±¡çï¼æ²¡æä»»ä½ç¹å®å¹³å°æç¹å®å®ç°çç»èãç°ä»£ JavaScript 弿坹ææè¿°çè¯ä¹è¿è¡äºå¤§éä¼åã
æ¬é¡µä» ä¾åèãå®åå®ä½ å·²ç»çæå ¶ä»ç¼ç¨è¯è¨ï¼å¦ C å Javaï¼çæ§è¡æ¨¡åãå®å¤§éå¼ç¨äºæä½ç³»ç»åç¼ç¨è¯è¨ä¸çç°ææ¦å¿µã
弿å宿主
JavaScript çæ§è¡éè¦ä¸¤ä¸ªè½¯ä»¶çé åï¼JavaScript 弿å宿主ç¯å¢ã
JavaScript 弿å®ç°äº ECMAScriptï¼JavaScriptï¼è¯è¨ï¼æä¾äºæ ¸å¿åè½ã宿¥æ¶æºä»£ç ï¼å¯¹å ¶è¿è¡è§£æå¹¶æ§è¡ã使¯ï¼ä¸ºäºä¸å¤é¨ä¸ç交äºï¼ä¾å¦äº§ç任使æä¹çè¾åºãä¸å¤é¨èµæºæ¥å£ï¼æå®ç°ä¸å®å ¨ææ§è½ç¸å ³çæºå¶ï¼æä»¬éè¦ç±å®¿ä¸»ç¯å¢æä¾é¢å¤çç¹å®ç¯å¢æºå¶ãä¾å¦ï¼å¨ web æµè§å¨ä¸æ§è¡ JavaScript æ¶ï¼HTML DOM å°±æ¯å®¿ä¸»ç¯å¢ãNode.js æ¯å¦ä¸ç§å 许 JavaScript 卿å¡å¨ç«¯è¿è¡ç宿主ç¯å¢ã
è½ç¶æä»¬å¨æ¬åèæç®ä¸ä¸»è¦å ³æ³¨çæ¯ ECMAScript ä¸å®ä¹çæºå¶ï¼ä½æä»¬å¶å°ä¹ä¼è®¨è®º HTML è§èä¸å®ä¹çæºå¶ï¼è¿äºæºå¶é常ä¼è¢« Node.js æ Deno çå ¶ä»å®¿ä¸»ç¯å¢ææ¨¡ä»¿ãè¿æ ·ï¼æä»¬å°±è½å¯¹ web åå ¶ä»ç¯å¢ä¸ä½¿ç¨ç JavaScript æ§è¡æ¨¡åç»åºä¸ä¸ªè¿è´¯çæè¿°ã
ä»£çæ§è¡æ¨¡å
å¨ JavaScript è§èä¸ï¼JavaScript çæ¯ä¸ªèªä¸»æ§è¡å¨é½è¢«ç§°ä¸ºä»£çï¼å®ç»´æ¤çèªå·±çä»£ç æ§è¡è®¾æ½ï¼
- ï¼å¯¹è±¡ï¼å ï¼è¿åªæ¯ä¸ä¸ªåç§°ï¼ç¨æ¥è¡¨ç¤ºå
åä¸çä¸ä¸ªå¤§åºåï¼å¤§å¤æ¯éç»æåçï¼ãå½ç¨åºä¸å建对象æ¶ï¼å®å°±ä¼è¢«å¡«å
ã请注æï¼å¨å
±äº«å
åçæ
åµä¸ï¼æ¯ä¸ªä»£ç齿èªå·±çå ï¼æ¯ä¸ªå 齿èªå·±çæ¬ç
SharedArrayBuffer对象ï¼ä½ç¼å²åºæä»£è¡¨çåºå±å åæ¯å ±äº«çã - ï¼ä½ä¸ï¼éåï¼è¿å¨ HTML ä¸ï¼é常ï¼è¢«ç§°ä¸ºäºä»¶å¾ªç¯ï¼event loopï¼ï¼å®å¯ä»¥å¨ JavaScript ä¸å®ç°å¼æ¥ç¼ç¨ï¼åæ¶åæ¯å线ç¨çãä¹æä»¥ç§°å ¶ä¸ºéåï¼æ¯å 为å®é常æ¯å å ¥å åºï¼å æ§è¡çå·¥ä½å¨åæ§è¡çå·¥ä½ä¹åã
- ï¼æ§è¡ä¸ä¸æï¼æ ï¼è¿å°±æ¯æè°çè°ç¨æ ï¼call stackï¼ï¼å 许éè¿è¿å ¥åéåºæ§è¡ä¸ä¸æï¼å¦å½æ°ï¼æ¥ä¼ è¾æ§å¶æµãä¹æä»¥ç§°ä¸ºæ ï¼æ¯å ä¸ºå®æ¯åè¿å åºçãæ¯ä¸ªä»»å¡è¿å ¥æ¶é½ä¼åï¼ç©ºï¼æ 䏿¨å ¥ä¸ä¸ªæ°å¸§ï¼éåºæ¶å伿¸ 空æ ã
è¿æ¯ä¸ç§ä¸åçæ°æ®ç»æï¼ç¨äºè·è¸ªä¸åçæ°æ®ãæä»¬å°å¨ä¸é¢çç« èä¸è¯¦ç»ä»ç»éååå æ ãè¦äºè§£å å åå¦ä½åé åéæ¾ï¼è¯·åé å å管çã
æ¯ä¸ªä»£çé½ç±»ä¼¼äºä¸ä¸ªçº¿ç¨ï¼æ³¨æï¼åºå±å®ç°å¯è½æ¯ä¹å¯è½ä¸æ¯å®é çæä½ç³»ç»çº¿ç¨ï¼ãæ¯ä¸ªä»£çå¯ä»¥æ¥æå¤ä¸ªåï¼ä¸å ¨å±å¯¹è±¡ä¸ä¸å¯¹åºï¼ï¼è¿äºä»£çå¯ä»¥åæ¥è®¿é®å½¼æ¤ï¼å æ¤éè¦å¨å个æ§è¡çº¿ç¨ä¸è¿è¡ãä¸ä¸ªä»£ç乿ä¸ä¸ªåä¸çå 忍¡åï¼è¡¨æå®æ¯å¦æ¯å°ç«¯åºçãæ¯å¦å¯ä»¥åæ¥é»å¡ãååæä½æ¯å¦æ éçã
web ä¸ç代çå¯ä»¥æ¯ä»¥ä¸ä¹ä¸ï¼
- ä¸ä¸ªå
å«åç§
Window对象çç¸ä¼¼æº window 代çï¼è¿äºå¯¹è±¡æå¯è½ç´æ¥æéè¿ä½¿ç¨document.domainç¸äºèç³»ã妿çªå£ææºæé®ï¼ååªæåæºçªå£æè½ç¸äºèç³»ã - ä¸ä¸ªå
å«
DedicatedWorkerGlobalScopeçä¸ç¨ Worker 代çã - ä¸ä¸ªå
å«
SharedWorkerGlobalScopeçå ±äº« Worker 代çã - ä¸ä¸ªå
å«
ServiceWorkerGlobalScopeç Service worker 代çã - ä¸ä¸ªå
å«
WorkletGlobalScopeç Worklet 代çã
æ¢å¥è¯è¯´ï¼æ¯ä¸ª Worker å建èªå·±ç代çï¼èä¸ä¸ªæå¤ä¸ªçªå£å¯è½å¨åä¸ä¸ªä»£çä¸ï¼é常æ¯ä¸ä¸ªä¸»ææ¡£åå ¶ç±»ä¼¼çæº iframeãå¨ Node.js ä¸ï¼ä¹æä¸ä¸ªç±»ä¼¼çæ¦å¿µï¼ç§°ä¸º worker 线ç¨ã
ä¸å¾è¯´æäºä»£ççæ§è¡æ¨¡å¼ï¼
å
æ¯ä¸ªä»£ç齿¥æä¸ä¸ªæå¤ä¸ªåï¼realmï¼ãæ¯ä¸æ®µ JavaScript 代ç å¨å è½½æ¶é½ä¼ä¸ä¸ä¸ªåç¸å ³èï¼å³ä½¿ä»å¦ä¸ä¸ªé¢åè°ç¨ä¹ä¸ä¼æ¹åãåç±ä»¥ä¸ä¿¡æ¯ç»æï¼
- åºæå¯¹è±¡å表ï¼å¦
ArrayãArray.prototypeçã - å
¨å±å£°æçåéã
globalThisçå¼ä»¥åå ¨å±å¯¹è±¡ã - 模æ¿å颿°ç»çç¼åï¼å 为对å䏿 è®°çæ¨¡æ¿åé¢è¡¨è¾¾å¼çæ±å¼æ»æ¯ä¼å¯¼è´æ è®°æ¥æ¶å°ç¸åçæ°ç»å¯¹è±¡ã
å¨ web ä¸ï¼ååå
¨å±å¯¹è±¡æ¯ä¸ä¸å¯¹åºçãå
¨å±å¯¹è±¡å¯ä»¥æ¯ WindowãWorkerGlobalScope æ WorkletGlobalScopeãå æ¤ï¼ä¸¾ä¾æ¥è¯´ï¼æ¯ä¸ª iframe é½å¨ä¸åçå䏿§è¡ï¼å°½ç®¡å®å¯è½ä¸ç¶çªå£å¨åä¸ä¸ªä»£çä¸ã
å¨è®¨è®ºå
¨å±å¯¹è±¡ç身份æ¶ï¼é叏伿å°åãä¾å¦ï¼æä»¬éè¦ Array.isArray() æ Error.isError() è¿æ ·çæ¹æ³ï¼å 为å¨å¦ä¸ä¸ªåæå»ºçæ°ç»çåå对象ä¸å½ååä¸ç Array.prototype 对象ä¸åï¼å æ¤ instanceof Array å°é误å°è¿å falseã
æ 䏿§è¡ä¸ä¸æ
æä»¬é¦å èèåæ¥ä»£ç æ§è¡ãæ¯ä¸ªä½ä¸éè¿è°ç¨ç¸å ³çåè°è¿å ¥ãåè°ä¸ç代ç å¯ä»¥å建åéãè°ç¨å½æ°æéåºãæ¯ä¸ªå½æ°é½éè¦è·è¸ªèªå·±çåéç¯å¢åè¿åä½ç½®ã为æ¤ï¼ä»£çéè¦ä¸ä¸ªå æ æ¥è·è¸ªæ§è¡ä¸ä¸æãæ§è¡ä¸ä¸æä¸è¬ä¹ç§°ä¸ºæ å¸§ï¼æ¯æ§è¡çæå°åä½ãå®è·è¸ªä»¥ä¸ä¿¡æ¯ï¼
- 代ç è¯ä¼°ç¶æï¼
- å 嫿¤ä»£ç çæ¨¡åæèæ¬ã彿°ï¼å¦éç¨ï¼ä»¥åå½åæ§è¡ççæå¨ï¼
- å½åçåï¼
- ç»å®ï¼å
æ¬ï¼
- ç¨
varãletãconstãfunctionãclassçå®ä¹çåéï¼ - ç§ææ è¯ç¬¦ï¼å¦
#fooï¼ä» å¨å½åä¸ä¸æä¸ææï¼ thiså¼ç¨ï¼
- ç¨
è¯æ³ä¸ä¸ï¼ä¸ä¸ªç¨åºç±ä»¥ä¸ä»£ç å®ä¹çå个ä½ä¸ç»æï¼
function foo(b) {
const a = 10;
return a + b + 11;
}
function bar(x) {
const y = 3;
return foo(x * y);
}
const baz = bar(7); // å° 42 èµå¼ç» baz
- ä»»å¡å¯å¨æ¶ï¼ä¼å建第ä¸ä¸ªæ 帧ï¼å
¶ä¸å®ä¹äºåé
fooãbaråbazãå®ä½¿ç¨åæ°7è°ç¨barã - 为
barè°ç¨å建第äºä¸ªæ 帧ï¼å ¶ä¸å å«åæ°xåå±é¨åéyçç»å®ãå®é¦å æ§è¡ä¹æ³è¿ç®x * yï¼ç¶å使ç¨ç»æè°ç¨fooã - 为
fooè°ç¨å建第ä¸ä¸ªæ 帧ï¼å ¶ä¸å å«åæ°båå±é¨åéaçç»å®ãå®é¦å æ§è¡å æ³è¿ç®a + b + 11ï¼ç¶åè¿åç»æã - å½
fooè¿åæ¶ï¼æä¸é¢ç帧å ç´ ä»å æ ä¸å¼¹åºï¼è°ç¨è¡¨è¾¾å¼foo(x * y)è§£æä¸ºè¿åå¼ãç¶åç»§ç»æ§è¡ï¼ä¹å°±æ¯è¿åè¿ä¸ªç»æã - å½
barè¿åæ¶ï¼æä¸é¢ç帧å ç´ ä»å æ ä¸å¼¹åºï¼è°ç¨è¡¨è¾¾å¼bar(7)è§£æä¸ºè¿åå¼ãè¿æ ·å°±ç¨è¿åå¼åå§åäºbazã - æä»¬å°è¾¾äºä½ä¸æºä»£ç çæ«å°¾ï¼å æ¤å ¥å£ç¹çæ 帧被ä»å æ ä¸å¼¹åºãå æ 为空ï¼å æ¤ä½ä¸è¢«è§ä¸ºå·²å®æã
çæå¨ä¸éå ¥
æ 帧弹åºåï¼å¹¶ä¸ä¸å®ä¼æ°¸è¿æ¶å¤±ï¼å ä¸ºææ¶æä»¬éè¦è¿åå°å®ãä¾å¦ï¼èèä¸ä¸ªçæå¨å½æ°ï¼
function* gen() {
console.log(1);
yield;
console.log(2);
}
const g = gen();
g.next(); // è¾åº 1
g.next(); // è¾åº 2
å¨è¿ç§æ
åµä¸ï¼è°ç¨ gen() é¦å
ä¼å建ä¸ä¸ªæèµ·çæ§è¡ä¸ä¸æââgen å
é¨ç代ç ä¸ä¼è¢«æ§è¡ãçæå¨ g ä¼å¨å
é¨ä¿åè¿ä¸ªæ§è¡ä¸ä¸æãå½åæ£å¨è¿è¡çæ§è¡ä¸ä¸æä»ç¶æ¯å
¥å£ç¹ãè°ç¨ g.next() æ¶ï¼gen çæ§è¡ä¸ä¸æä¼è¢«æ¨å
¥å æ ï¼gen å
é¨ç代ç ä¼ä¸ç´æ§è¡å° yield 表达å¼ãç¶åï¼çæå¨çæ§è¡ä¸ä¸æè¢«æèµ·å¹¶ä»å æ ä¸ç§»é¤ï¼æ§å¶æè¿åå
¥å£ç¹ã忬¡è°ç¨ g.next() æ¶ï¼çæå¨çæ§è¡ä¸ä¸æä¼è¢«æ¨åå æ ï¼gen å
é¨ç代ç ä¼ä»ä¸æ¬¡ä¸æçå°æ¹ç»§ç»æ§è¡ã
å°¾è°ç¨
è§èä¸å®ä¹çä¸ç§æºå¶æ¯æ£ç¡®çå°¾è°ç¨ï¼proper tail callï¼PTCï¼ã妿è°ç¨è å¨è°ç¨åé¤äºè¿åå¼å¤ä»ä¹ä¹ä¸åï¼é£ä¹è¯¥å½æ°è°ç¨å°±æ¯å°¾é¨è°ç¨ï¼
function f() {
return g();
}
å¨è¿ç§æ
åµä¸ï¼å¯¹ g çè°ç¨æ¯å°¾è°ç¨ã妿彿°è°ç¨å¤äºå°¾é¨ä½ç½®ï¼å¼æéè¦ä¸¢å¼å½åçæ§è¡ä¸ä¸æï¼ä»£ä¹ä»¥å°¾é¨è°ç¨çä¸ä¸æï¼è䏿¯ä¸º g() è°ç¨æ¨éä¸ä¸ªæ°å¸§ãè¿æå³çå°¾éå½ä¸åå æ 大å°çéå¶ï¼
function factorial(n, acc = 1) {
if (n <= 1) return acc;
return factorial(n - 1, n * acc);
}
å®é
ä¸ï¼ä¸¢å¼å½å帧ä¼å¯¼è´è°è¯é®é¢ï¼å ä¸ºå¦æ g() å¼åé误ï¼f å°±ä¸åå¨å æ ä¸ï¼ä¹ä¸ä¼åºç°å¨å æ è·è¸ªä¸ãç®åï¼åªæ Safariï¼JavaScriptCoreï¼å®ç°äº PTCï¼èä¸ä»ä»¬è¿åæäºä¸äºç¹å®åºç¡è®¾æ½æ¥è§£å³è°è¯é®é¢ã
éå
ä¸åéèå´å彿°è°ç¨ç¸å ³çå¦ä¸ä¸ªæè¶£ç°è±¡æ¯éå ãæ¯å½å建ä¸ä¸ªå½æ°æ¶ï¼å®ä¹ä¼å¨å é¨è®°å¿å½åè¿è¡çæ§è¡ä¸ä¸æçåéç»å®ãè¿æ ·ï¼è¿äºåéç»å®å°±å¯ä»¥è¶ è¶æ§è¡ä¸ä¸æã
let f;
{
let x = 10;
f = () => x;
}
console.log(f()); // è¾åº 10
ä½ä¸éåä¸äºä»¶å¾ªç¯
åä¸ªä»£çæ¯ä¸ä¸ªçº¿ç¨ï¼è¿æå³çè§£éå¨ä¸æ¬¡åªè½å¤ç䏿¡è¯å¥ãå½ä»£ç 齿¯åæ¥çæ¶åï¼è¿æ²¡æé®é¢ï¼å 为æä»¬æ»æ¯è½åå¾è¿å±ãä½å¦æä»£ç éè¦æ§è¡å¼æ¥æä½ï¼é£ä¹é¤é该æä½å®æï¼å¦åæä»¬å°±æ æ³åå¾è¿å±ã使¯ï¼å¦ææ´ä¸ªç¨åºå æ¤è忢ï¼å°±ä¼å½±åç¨æ·ä½éªââJavaScript ä½ä¸º web èæ¬è¯è¨çç¹æ§è¦æ±å®æ°¸ä¸é»å¡ãå æ¤ï¼å¤ç弿¥æä½å®æç代ç 被å®ä¹ä¸ºåè°ã该åè°å®ä¹äºä¸ä¸ªä»»å¡ï¼ä¸æ¦å¨ä½å®æï¼è¯¥ä»»å¡å°±ä¼è¢«æ¾å ¥ä¸ä¸ªä»»å¡éåï¼æè ç¨ HTML æ¯è¯æ¥è¯´ï¼ä¸ä¸ªäºä»¶å¾ªç¯ã
æ¯æ¬¡ï¼ä»£çé½ä¼ä»éå䏿åºä¸ä¸ªä½ä¸å¹¶æ§è¡å®ãä½ä¸æ§è¡å®æ¯åï¼å¯è½ä¼å建æ´å¤ä½ä¸ï¼è¿äºä½ä¸ä¼è¢«æ·»å å°éåçæ«å°¾ãä¹å¯ä»¥éè¿å®æå¼æ¥å¹³å°æºå¶ï¼å¦è®¡æ¶å¨ãI/O åäºä»¶ï¼æ¥æ·»å ä½ä¸ã彿 为空æ¶ï¼ä½ä¸è¢«è§ä¸ºå·²å®æï¼ç¶åï¼ä¸ä¸ä¸ªä½ä¸ä¼ä»éå䏿åºãä½ä¸å¯è½ä¸ä¼ä»¥ç»ä¸çä¼å 级被æåºââä¾å¦ï¼HTML äºä»¶å¾ªç¯ä¼å°ä½ä¸åæä¸¤ç±»ï¼ä»»å¡å微任å¡ã微任å¡å ·ææ´é«çä¼å 级ï¼å¨ä»»å¡éå被æåºä¹åï¼å¾®ä»»å¡éåä¼å 被æç©ºãæå ³è¯¦ç»ä¿¡æ¯ï¼è¯·æ¥é HTML 微任塿åã妿任å¡éå为空ï¼ä»£çå°çå¾ æ´å¤ä»»å¡çæ·»å ã
âè¿è¡è³å®æ¯â
æ¯ä¸ªä½ä¸é½ä¼å¨å¤çå ¶ä»ä½ä¸ä¹å被å®å ¨å¤çãè¿å¨æ¨çç¨åºæ¶æä¾äºä¸äºå¾å¥½çç¹æ§ï¼å æ¬æ è®ºå½æ°ä½æ¶è¿è¡ï¼å®é½ä¸ä¼è¢«æ¢å ï¼å¹¶ä¸ä¼å¨ä»»ä½å ¶ä»ä»£ç è¿è¡ä¹åå®å ¨è¿è¡ï¼å¹¶ä¸å¯ä»¥ä¿®æ¹å½æ°æä½çæ°æ®ï¼ãè¿ä¸ C è¯è¨ä¸åï¼ä¾å¦ï¼å¦æå½æ°å¨ä¸ä¸ªçº¿ç¨ä¸è¿è¡ï¼è¿è¡æ¶ç³»ç»å¯è½ä¼å¨ä»»ä½æ¶ååæ¢è¯¥å½æ°ï¼ä»¥ä¾¿å¨å¦ä¸ä¸ªçº¿ç¨ä¸è¿è¡å ¶ä»ä»£ç ã
ä¾å¦ï¼èèè¿ä¸ªç¤ºä¾ï¼
const promise = Promise.resolve();
let i = 0;
promise.then(() => {
i += 1;
console.log(i);
});
promise.then(() => {
i += 1;
console.log(i);
});
卿¬ä¾ä¸ï¼æä»¬å建äºä¸ä¸ªå·²è§£å³ç promiseï¼è¿æå³çéå å°è¯¥ promise ä¸çä»»ä½åè°é½ä¼è¢«ç«å³è°åº¦ä¸ºä½ä¸ãè¿ä¸¤ä¸ªåè°ä¼¼ä¹ä¼å¯¼è´æ¡ä»¶ç«äºï¼ä½å®é
ä¸ï¼è¾åºæ¯å®å
¨å¯é¢æµçï¼å°ä¾æ¬¡è¾åº 1 å 2ãè¿æ¯å 为æ¯ä¸ªä½ä¸é½ä¼å¨ä¸ä¸ä¸ªä½ä¸æ§è¡ä¹åè¿è¡å®æï¼æä»¥æ»çé¡ºåºæ»æ¯ i += 1; console.log(i); i += 1; console.log(i);ï¼èç»ä¸ä¼æ¯ i += 1; i += 1; console.log(i); console.log(i);ã
è¿ç§æ¨¡å¼çä¸ä¸ªç¼ºç¹æ¯ï¼å¦æä½ä¸å®ææ¶é´è¿é¿ï¼web åºç¨ç¨åºå°±æ æ³å¤çç¹å»ææ»å¨çç¨æ·äº¤äºãæµè§å¨éè¿âèæ¬è¿è¡æ¶é´è¿é¿âå¯¹è¯æ¡æ¥ç¼è§£è¿ä¸é®é¢ãä¸ä¸ªå¥½çåæ³æ¯ç¼©çä½ä¸å¤çæ¶é´ï¼å¹¶å°½å¯è½å°ä¸ä¸ªä½ä¸å解为å¤ä¸ªä½ä¸ã
æ°¸ä¸é»å¡
äºä»¶å¾ªç¯æ¨¡åæä¾çå¦ä¸ä¸ªéè¦ä¿è¯æ¯ JavaScript çæ§è¡æ°¸è¿ä¸ä¼é»å¡ãå¤ç I/O é常æ¯éè¿äºä»¶ååè°æ¥æ§è¡çï¼å æ¤å½åºç¨ç¨åºå¨çå¾
IndexedDB æ¥è¯¢è¿åæ fetch() 请æ±è¿åæ¶ï¼å®ä»ç¶å¯ä»¥å¤çç¨æ·è¾å
¥çå
¶ä»äºæ
ã弿¥æä½å®æåæ§è¡çä»£ç æ»æ¯ä»¥åè°å½æ°ç形弿ä¾ï¼ä¾å¦ï¼promise then() å¤çç¨åºãsetTimeout() ä¸çåè°å½æ°æäºä»¶å¤çç¨åºï¼ï¼å®å®ä¹äºæä½å®æåæ·»å å°ä½ä¸éåä¸çä½ä¸ã
å½ç¶ï¼âæ°¸ä¸é»å¡âçä¿è¯è¦æ±å¹³å° API æ¬èº«å¿
é¡»æ¯å¼æ¥çï¼ä½ä¹åå¨ä¸äºä¼ ç»çä¾å¤æ
åµï¼å¦ alert() æåæ¥ XHRã为äºç¡®ä¿åºç¨ç¨åºçååºé度ï¼é¿å
使ç¨è¿äºä¾å¤æ
嵿¯ä¸ç§å¾å¥½çåæ³ã
代çé群ä¸å åå ±äº«
å¤ä¸ªä»£çå¯ä»¥éè¿å ±äº«å åè¿è¡éä¿¡ï¼å½¢æä¸ä¸ªä»£çé群ãå½ä¸ä» å½ä»£çå¯ä»¥å ±äº«å åæ¶ï¼å®ä»¬æå±äºåä¸ä¸ªé群ã两个代çé群没æäº¤æ¢ä»»ä½ä¿¡æ¯çå ç½®æºå¶ï¼å æ¤å®ä»¬å¯ä»¥è¢«è§ä¸ºå®å ¨å¤ç«çæ§è¡æ¨¡åã
å¨åå»ºä»£çæ¶ï¼ä¾å¦éè¿çæ Workerï¼ï¼æä¸äºæ 忥å³å®å®æ¯ä¸å½å代çå¨åä¸ä¸ªé群ä¸ï¼è¿æ¯å建ä¸ä¸ªæ°çé群ãä¾å¦ï¼ä»¥ä¸å å¯¹å ¨å±å¯¹è±¡é½å¨åä¸ä¸ªä»£çé群ä¸ï¼å æ¤å¯ä»¥ç¸äºå ±äº«å åï¼
Window对象åå ¶å建çä¸ç¨ Workerã- ä¸ä¸ª Workerï¼ä»»ä½ç±»åï¼åå ¶å建çä¸ä¸ªä¸ç¨ Workerã
Window对象 A å A å建çåæºiframeå ç´ çWindow对象ã- ä¸ä¸ª
Window对象åæå¼å®çåæºWindow对象ã - ä¸ä¸ª
Window对象åå ¶å建çä¸ä¸ª workletã
以ä¸å å¯¹å ¨å±å¯¹è±¡ä¸å¨åä¸ä¸ªä»£çé群å ï¼å æ¤ä¸è½å ±äº«å åï¼
Window对象åå ¶å建çå ±äº« Workerã- ä¸ä¸ª Workerï¼ä»»ä½ç±»åï¼åå ¶å建çå ±äº« Workerã
Window对象åå ¶å建ç service workerãWindow对象 A å A å建çiframeå ç´ çWindow对象ï¼è¯¥å ç´ ä¸è½ä¸ A å±äºåæºåã- ä»»ä½ä¸¤ä¸ªæ²¡ææå¼è
æç¥å
å
³ç³»ç
Window对象ãå³ä½¿è¿ä¸¤ä¸ªWindow对象æ¯åæºåï¼ä¹æ¯å¦æ¤ã
å ·ä½ç®æ³å¯ä»¥åé HTML è§èã
跨代ç交æµä¸å 忍¡å
å¦åæè¿°ï¼ä»£çéè¿å
±äº«å
åè¿è¡éä¿¡ãå¨ç½ç»ä¸ï¼å
忝éè¿ postMessage() æ¹æ³å
±äº«çãä½¿ç¨ web worker æå对æ¤è¿è¡äºæ¦è¿°ãé常æ
åµä¸ï¼æ°æ®åªæå¼ä¼ éï¼éè¿ç»æåå
éï¼ï¼å æ¤ä¸æ¶åä»»ä½å¹¶å夿æ§ãè¦å
±äº«å
åï¼å¿
é¡»åå¸ä¸ä¸ª SharedArrayBuffer 对象ï¼å¤ä¸ªä»£çå¯ä»¥åæ¶è®¿é®è¯¥å¯¹è±¡ã两个代çéè¿ SharedArrayBuffer å
±äº«åä¸å
ååï¼å°±å¯ä»¥éè¿ Atomics å¯¹è±¡åæ¥æ§è¡ã
访é®å ±äº«å åæä¸¤ç§æ¹å¼ï¼æ®éå å访é®ï¼éåå访é®ï¼åååå å访é®ãåè æ¯é¡ºåºä¸è´çï¼è¿æå³çé群ä¸çææä»£çé½åæå¯¹äºä»¶è¿è¡ä¸¥æ ¼çæ»æåºï¼ï¼èåè æ¯æ åºçï¼è¿æå³çä¸å卿åºï¼ãJavaScript 䏿ä¾å ·æå ¶ä»æåºä¿è¯çæä½ã
该è§è为使ç¨å ±äº«å åçç¨åºåæä¾äºä»¥ä¸æå¯¼ï¼
æä»¬å»ºè®®ç¨åºä¿ææ æ°æ®ç«äºï¼å³å¨åä¸å åä½ç½®ä¸ä¸å¯è½æå¹¶åçéååæä½ãæ æ°æ®ç«äºç¨åºå ·æäº¤éè¯ä¹ï¼æ¯ä¸ªä»£ççæ¯ä¸æ¥è¯ä¼°è¯ä¹é½æ¯ç¸äºäº¤éçãå¯¹äºæ æ°æ®ç«äºçç¨åºï¼æ éäºè§£å 忍¡åçç»èãè¿äºç»èä¸å¤ªå¯è½å»ºç«èµ·æå©äºæ´å¥½å°ç¼å ECMAScript çç´è§ã
æ´ä¸è¬å°è¯´ï¼å³ä½¿ç¨åºä¸å卿°æ®ç«äºï¼åªè¦ååæä½ä¸æ¶å任使°æ®ç«äºï¼å¹¶ä¸ç«äºæä½ç访é®å¤§å°ç¸åï¼é£ä¹ç¨åºå°±å¯è½å ·æå¯é¢æµçè¡ä¸ºãè¦ä½¿ååæä½ä¸åä¸ç«äºï¼æç®åçæ¹æ³å°±æ¯ç¡®ä¿ååæä½åéååæä½ä½¿ç¨ä¸åçå ååå ï¼èä¸ä¸å大å°çåå访é®ä¸è½åæ¶ç¨äºè®¿é®ç¸åçåå ãå®é ä¸ï¼ç¨åºåºå°½å¯è½å°å ±äº«å åè§ä¸ºå¼ºç±»åå åãè½ç¶æä»¬ä»ç¶ä¸è½ä¾èµäºéåå访é®çæåºåæ¶é´ï¼ä½å¦æå å被è§ä¸ºå¼ºç±»åï¼é£ä¹ç«äºè®¿é®å°±ä¸ä¼âæè£âï¼å ¶å¼ç使°ä¸ä¼æ··åï¼ã
å¹¶åæ§ä¸ç¡®ä¿è¿å±
å½å¤ä¸ªä»£çå使¶ï¼æ°¸ä¸é»å¡ä¿è¯å¹¶ä¸æ»æ¯æç«çãä¸ä¸ªä»£çå¨çå¾ å¦ä¸ä¸ªä»£çæ§è¡æäºæä½æ¶ï¼å¯è½ä¼è¢«é»å¡ææåãè¿ä¸åäºå¨åä¸ä»£çä¸çå¾ ä¸ä¸ª promiseï¼å 为å®ä¼ä½¿æ´ä¸ªä»£ç忢ï¼å¹¶ä¸ä¸å 许任ä½å ¶ä»ä»£ç 卿¤æé´è¿è¡ï¼æ¢å¥è¯è¯´ï¼å®æ æ³åå¾è¿å±ã
ä¸ºé²æ¢åºç°æ»éï¼å¯¹ä½æ¶ä»¥ååªäºä»£çä¼è¢«é»å¡æä¸äºä¸¥æ ¼çéå¶ã
- æ¯ä¸ªæ¥æä¸ç¨æ§è¡çº¿ç¨çæªåé»ä»£çæç»é½ä¼åå¾è¿å±ã
- å¨ä¸ç»å ±äº«æ§è¡çº¿ç¨ç代çä¸ï¼æç»ä¼æä¸ä¸ªä»£çåå¾è¿å±ã
- é¤ééè¿æä¾é»å¡åè½çæ¾å¼åºç¨ç¨åºæ¥å£ï¼å¦åä¸ä¸ªä»£çä¸ä¼å¯¼è´å¦ä¸ä¸ªä»£ç被é»å¡ã
- åªææäºä»£çå¯ä»¥è¢«é»å¡ãå¨ web ä¸ï¼è¿å æ¬ä¸ç¨ Worker åå ±äº« Workerï¼ä½ä¸å æ¬ç¸ä¼¼æºçªå£æ service workerã
å¨å¤é¨æåæç»æ¢çæ åµä¸ï¼ä»£çé群å¯ç¡®ä¿å ¶ä»£çæ´»å¨å ·æä¸å®ç¨åº¦ç宿´æ§ï¼
- 代çå¯è½ä¼å¨ä¸ç¥æ æä¸é åçæ åµä¸è¢«æåææ¢å¤ãä¾å¦ï¼å¯¼èªç¦»å¼çªå£å¯è½ä¼æåä»£ç æ§è¡ï¼ä½ä¼ä¿çå ¶ç¶æã使¯ï¼ä¸å 许é¨ååç¨ä»£çé群ï¼ä»¥é¿å 代çå å ¶ä»ä»£ç被åç¨èé·å ¥é¥¥é¥¿ç¶æãä¾å¦ï¼å ±äº«å·¥ä½è æ°¸è¿ä¸ä¼ä¸å建è çªå£æå ¶ä»ä¸ç¨å·¥ä½è å¨åä¸ä¸ªä»£çé群ä¸ãè¿æ¯å ä¸ºå ±äº«å·¥ä½è ççå½å¨æä¸ææ¡£æ å ³ï¼å¦æææ¡£å¨å ¶ä¸ç¨ worker ææéçæ åµä¸è¢«åç¨ï¼é£ä¹å ±äº« worker å°è¢«é»æ¢è·åéï¼ç´å°ä¸ç¨ worker è¢«éæ°æ¿æ´»ä¸ºæ¢ï¼å¦ææçè¯ï¼ã䏿¤åæ¶ï¼è¯å¾ä»å ¶ä»çªå£è®¿é®å ±äº« worker çå ¶ä» worker å°å¤äºé¥¥é¥¿ç¶æã
- åæ ·ï¼ä»£çä¹å¯è½å é群å¤é¨å ç´ èç»æ¢ãä¾å¦ï¼æä½ç³»ç»æç¨æ·ææ»æµè§å¨è¿ç¨ï¼ææµè§å¨å 使ç¨è¿å¤èµæºè强å¶ç»æ¢ä¸ä¸ªä»£çãå¨è¿ç§æ åµä¸ï¼é群ä¸çææä»£çé½ä¼è¢«ç»æ¢ãï¼è§èè¿å 许第äºç§çç¥ï¼å³éè¿ APIï¼å 许é群ä¸è³å°ä¸ä¸ªå©ä½æåè¯å«ç»æ¢æ åµåè¢«ç»æ¢ç代çï¼ä½è¿å¹¶æ²¡æå¨ web ä¸å®ç°ï¼ã
è§è
| Specification |
|---|
| ECMAScript® 2026 Language Specification > |
| ECMAScript® 2026 Language Specification > |
| HTML > |
åè§
- HTML è§èä¸çäºä»¶å¾ªç¯
- Node.js ææ¡£ä¸çä»ä¹æ¯äºä»¶å¾ªç¯ï¼