æ¬¢è¿æ¥å° MDN ç JavaScript åå¦è 课ç¨ï¼æ¬èå°å¨ä¸å®é«åº¦ä¿¯ç° JavaScriptï¼åçä¸äºè¯¸å¦â宿¯ä»ä¹ï¼âåâå®è½åä»ä¹ï¼âçé®é¢ãå¹¶ä½¿ä½ çæ JavaScript çç¨éã
åæï¼ è®¡ç®æºåºç¡ç¥è¯ï¼åæ¥çè§£ HTML å CSSã ç®æ ï¼ åæ¥äºè§£ JavaScriptï¼å æ¬ä¸äºæ¦å¿µãç¨éååµå ¥ç½ç«çæ¹æ³ã é«å±å®ä¹JavaScript æ¯ä¸ç§èæ¬ç¼ç¨è¯è¨ï¼å®å¯ä»¥å¨ç½é¡µä¸å®ç°å¤æçåè½ï¼ç½é¡µå±ç°ç»ä½ çä¸åæ¯ç®åçéæä¿¡æ¯ï¼èæ¯å®æ¶çå å®¹æ´æ°ââ交äºå¼çå°å¾ã2D/3D å¨ç»ãæ»å¨ææ¾çè§é¢ççââJavaScript å°±å¨å ¶ä¸ã宿¯æ å Web ææ¯èç³ç第ä¸å±ï¼å ¶ä¸ HTML å CSS æä»¬å·²ç»å¨å¦ä¹ åºçå ¶ä»é¨åè¿è¡äºè¯¦ç»ç讲解ã
è¿ä¸å±ä¾æ¬¡å»ºç«ï¼ç§©åºäºç¶ã以ç®åææ¬æ ç¾ä½ä¸ºç¤ºä¾ãé¦å ç¨ HTML å°ææ¬æ è®°èµ·æ¥ï¼ä»èèµäºå®ç»æåç®çï¼
<button type="button">Player 1: Chris</button>
ç¶åæä»¬å¯ä»¥ä¸ºå®å ä¸ç¹ CSS è®©å®æ´å¥½çï¼
button {
font-family: "helvetica neue", helvetica, sans-serif;
letter-spacing: 1px;
text-transform: uppercase;
border: 2px solid rgb(200 200 0 / 60%);
background-color: rgb(0 217 217 / 60%);
color: rgb(100 0 0 / 100%);
box-shadow: 1px 1px 2px rgb(0 0 200 / 40%);
border-radius: 10px;
padding: 3px 10px;
cursor: pointer;
}
æåï¼æä»¬å¯ä»¥åå ä¸ä¸äº JavaScript æ¥å®ç°å¨æè¡ä¸ºï¼
const button = document.querySelector("button");
button.addEventListener("click", updateName);
function updateName() {
const name = prompt("请è¾å
¥æ°çåå");
button.textContent = `Player 1: ${name}`;
}
å°è¯ç¹å»æåä¸ä¸ªçæ¬çææ¬æ ç¾ï¼è§å¯ä¼åçä»ä¹ï¼ä¹å¯å¨ GitHub 䏿¥çè¿ä¸ªæ¼ç¤ºçæºä»£ç æå¨çº¿è¿è¡å®ï¼ï¼
JavaScript è½åçè¿ä¸æ¢è¿äºã让æä»¬æ¥ä»ç»æ¢ç´¢ã
å®å°åºå¯ä»¥åä»ä¹ï¼å®¢æ·ç«¯ JavaScript è¯è¨çæ ¸å¿å å«ä¸äºæ®éçç¼ç¨ç¹æ§ï¼ä»¥è®©ä½ å¯ä»¥åå°å¦ä¸çäºæ ï¼
name
åéä¸ãname
åéæ¼æ¥èµ·æ¥ï¼åé åºå®æ´çææ¬æ ç¾ï¼æ¯å¦âç©å®¶ 1ï¼å°æâãclick
äºä»¶æ¥æ£æµæé®ä»ä¹æ¶å被ç¹å»ï¼ç¶åè¿è¡ä»£ç æ´æ°ææ¬æ ç¾ãJavaScript è¯è¨æ ¸å¿ä¹ä¸ææå»ºçåè½æ´ä»¤äººå ´å¥ãåºç¨ç¨åºæ¥å£ï¼Application Programming Interfaceï¼APIï¼å°ä¸ºä½ çä»£ç æä¾é¢å¤çè¶ è½åã
API æ¯å·²ç»å»ºç«å¥½çä¸å¥ä»£ç ç»ä»¶ï¼å¯ä»¥è®©å¼åè å®ç°åæ¬å¾é¾çè³æ æ³å®ç°çç¨åºãå°±åç°æçå®¶å ·å¥ä»¶ä¹äºå®¶å± 建设ï¼ç¨ä¸äºå·²ç»åå¥½çæ¨æ¿ç»è£ ä¸ä¸ªä¹¦æï¼æ¾ç¶æ¯èªå·±è®¾è®¡ï¼å¯»æ¾åéçæ¨æï¼è£åè³åéç尺寸åå½¢ç¶ï¼æ¾å°æ£ç¡®å°ºå¯¸çèºéï¼ç¶ååç»è£ æä¹¦æè¦ç®åå¾å¤ã
API é常å为两类ã
æµè§å¨ API å å»ºäº web æµè§å¨ä¸ï¼å®ä»¬å¯ä»¥å°æ°æ®ä»å¨è¾¹è®¡ç®æºç¯å¢ä¸çéåºæ¥ï¼è¿å¯ä»¥åå®ç¨ç夿工ä½ãä¾å¦ï¼
HTMLMediaElement
å WebRTC çå½±é³ç±» API è®©ä½ å¯ä»¥å©ç¨å¤åªä½åä¸äºé常æè¶£çäºï¼æ¯å¦å¨ç½é¡µä¸ç´æ¥ææ¾é³ä¹åå½±çï¼æç¨èªå·±çç½ç»æå头è·åå½åï¼ç¶åå¨å
¶ä»äººççµèä¸å±ç¤ºï¼è¯ç¨ç®æçæªå¾æ¼ç¤ºä»¥çè§£è¿ä¸ªæ¦å¿µï¼ã夿³¨ï¼ ä¸è¿°å¾å¤æ¼ç¤ºé½ä¸è½å¨æ§æµè§å¨ä¸è¿è¡ãæ¨èä½ å¨æµè¯ä»£ç æ¶ä½¿ç¨è¯¸å¦ FirefoxãChromeãEdge æè Opera çç°ä»£æµè§å¨ãå½ä»£ç å³å°äº¤ä»ç产ç¯å¢æ¶ï¼ä¹å°±æ¯çå®ç客æ·å³å°ä½¿ç¨çå®çä»£ç æ¶ï¼ï¼ä½ è¿éè¦æ·±å ¥èèè·¨å¹³å°æµè¯ã
ç¬¬ä¸æ¹ API 并没æé»è®¤åµå ¥æµè§å¨ä¸ï¼ä¸è¬è¦ä»ç½ä¸åå¾å®ä»¬ç代ç åä¿¡æ¯ãæ¯å¦ï¼
夿³¨ï¼ è¿äº API 为è¿é¶å å®¹ï¼æ¬æ¨¡åä¸ä¸ä¼æ¶åï¼æ´å¤ä¿¡æ¯è¯·åèï¼å®¢æ·ç«¯ web API 模åã
å 稳ä½ï¼ä½ çå°çåªæ¯å°å±±ä¸è§ãä½ ä¸å¯è½ä» é å¦ä¸å¤© JavaScript å°±è½æå»ºä¸ä¸ä¸ª Facebookãè°·æå°å¾ãæ Instagramââè¿æå¾å¤åºç¡éè¦äºè§£ï¼è¿ä¹æ¯ä¸ºä»ä¹ä½ ä¼å¨è¿éï¼è®©æä»¬ç»§ç»å§ï¼
JavaScript å¨é¡µé¢ä¸åäºä»ä¹ï¼ç°å¨æä»¬å®å®å¨å¨çå¦ä¹ ä¸äºä»£ç ï¼ä¸æ¤åæ¶ï¼æ¢ç´¢ JavaScript è¿è¡æ¶èååççäºæ ã
让æä»¬ç®åå顾ä¸ä¸ï¼æµè§å¨å¨è¯»åä¸ä¸ªç½é¡µæ¶é½åçä»ä¹ï¼CSS å¦ä½å·¥ä½ä¸æä¸é¦æ¬¡è°åï¼ãæµè§å¨å¨è¯»åä¸ä¸ªç½é¡µæ¶ï¼ä»£ç ï¼HTMLãCSS å JavaScriptï¼å°å¨ä¸ä¸ªè¿è¡ç¯å¢ï¼æµè§å¨æ ç¾é¡µï¼ä¸å¾å°æ§è¡ãå°±åä¸é´å·¥åï¼å°åææï¼ä»£ç ï¼å 工为ä¸ä»¶äº§åï¼ç½é¡µï¼ã
JavaScript çä¸ä¸ªé常常è§çç¨éæ¯éè¿ææ¡£å¯¹è±¡æ¨¡å APIï¼å¦ä¸æè¿°ï¼å¨æä¿®æ¹ HTML å CSSï¼ä»¥æ´æ°ç¨æ·çé¢ã
æµè§å¨å®å ¨æ¯ä¸ªæµè§å¨æ ç¾é¡µå°±æ¯å ¶èªèº«ç¨æ¥è¿è¡ä»£ç çç¬ç«å®¹å¨ï¼è¿äºå®¹å¨ç¨ä¸ä¸æ¯è¯ç§°ä¸ºâè¿è¡ç¯å¢âï¼ã大夿°æ åµä¸ï¼æ¯ä¸ªæ ç¾é¡µä¸ç代ç å®å ¨ç¬ç«è¿è¡ï¼èä¸ä¸ä¸ªæ ç¾é¡µä¸ç代ç ä¸è½ç´æ¥å½±åå¦ä¸ä¸ªæ ç¾é¡µï¼æè å¦ä¸ä¸ªç½ç«ï¼ä¸ç代ç ãè¿æ¯ä¸ä¸ªå¥½çå®å ¨æªæ½ï¼å¦æä¸è¿æ ·ï¼é»å®¢å°±å¯ä»¥ä»å ¶ä»ç½ç«çåä¿¡æ¯ï¼æåä¸äºå ¶ä»åäºã
夿³¨ï¼ 以å®å ¨çæ¹å¼å¨ä¸åç½ç«ææ ç¾é¡µä¸ä¼ é代ç åæ°æ®çæ¹æ³æ¯åå¨çï¼ä½å®ä»¬å±äºè¿é¶ææ¯ï¼æ¬è¯¾ç¨ä¸ä¼æ¶åã
JavaScript è¿è¡æ¬¡åºå½æµè§å¨æ§è¡å°ä¸æ®µ JavaScript ä»£ç æ¶ï¼é叏伿ä»ä¸å¾ä¸çé¡ºåºæ§è¡è¿æ®µä»£ç ãè¿æå³çä½ éè¦æ³¨æä»£ç 书åç顺åºãæ¯å¦ï¼æä»¬åå°ç¬¬ä¸ä¸ªä¾åä¸ç JavaScript 代ç ï¼
const button = document.querySelector("button");
button.addEventListener("click", updateName);
function updateName() {
const name = prompt("è¾å
¥ä¸ä¸ªæ°çååï¼");
button.textContent = `ç©å®¶ 1ï¼${name}`;
}
é¦å
ä½¿ç¨ document.querySelector
éå®ä¸ä¸ªæé®ï¼ç¶åä½¿ç¨ addEventListener
ç»å®éä¸ä¸ä¸ªäºä»¶çå¬å¨ï¼ç¬¬ 3 è¡ï¼ï¼ä½¿å¾å¨å®è¢«ç¹å»æ¶ï¼updateName()
代ç åï¼5 â 8 è¡ï¼ä¾¿ä¼è¿è¡ãupdateName()
代ç åï¼è¿ç±»å¯ä»¥éå¤ä½¿ç¨ç代ç å称为â彿°âï¼åç¨æ·è¯·æ±ä¸ä¸ªæ°ååï¼ç¶åæè¿ä¸ªååæå
¥å°æ®µè½ä¸ä»¥æ´æ°æ¾ç¤ºã
å¦æäºæ¢äºä»£ç éæå两è¡ç顺åºï¼ä¼å¯¼è´é®é¢ãæµè§å¨å¼åè
æ§å¶å°å°è¿åä¸ä¸ªé误ï¼Uncaught ReferenceError: Cannot access 'button' before initialization
ãè¿æå³ç button
å¯¹è±¡è¿æªåå§åï¼æä»¥æä»¬ä¸è½ä¸ºå®å¢æ·»äºä»¶çå¬å¨ã
夿³¨ï¼ è¿æ¯ä¸ä¸ªå¾å¸¸è§çé误ï¼å¨å¼ç¨å¯¹è±¡ä¹åå¿ é¡»ç¡®ä¿è¯¥å¯¹è±¡å·²ç»åå¨ã
è§£é代ç vs ç¼è¯ä»£ç ä½ä¸ºç¨åºåï¼ä½ æè®¸å¬è¯´è¿è¿ä¸¤ä¸ªæ¯è¯ï¼è§£éï¼interpretï¼åç¼è¯ï¼compileï¼ãå¨è§£éåè¯è¨ä¸ï¼ä»£ç èªä¸èä¸è¿è¡ï¼ä¸å®æ¶è¿åè¿è¡ç»æã代ç å¨ç±æµè§å¨æ§è¡åï¼ä¸éè¦å°å ¶è½¬åä¸ºå ¶ä»å½¢å¼ã代ç å°ç´æ¥ä»¥ææ¬æ ¼å¼è¢«æ¥æ¶åå¤çã
ç¸å¯¹çï¼ç¼è¯åè¯è¨éè¦å å°ä»£ç 转åï¼ç¼è¯ï¼æå¦ä¸ç§å½¢å¼æè½è¿è¡ãæ¯å¦ C/C++ å 被ç¼è¯ææºå¨ç ï¼ç¶åæè½ç±è®¡ç®æºè¿è¡ãç¨åºå°ä»¥äºè¿å¶çæ ¼å¼è¿è¡ï¼è¿äºäºè¿å¶å 容æ¯ç±ç¨åºæºä»£ç 产ççã
JavaScript æ¯è½»é级解éåè¯è¨ãæµè§å¨æ¥åå° JavaScript 代ç ï¼å¹¶ä»¥ä»£ç èªèº«çææ¬æ ¼å¼è¿è¡å®ãææ¯ä¸ï¼å 乿æ JavaScript 转æ¢å¨é½è¿ç¨äºä¸ç§å«å峿¶ç¼è¯ï¼just-in-time compilingï¼çææ¯ï¼å½ JavaScript æºä»£ç 被æ§è¡æ¶ï¼å®ä¼è¢«ç¼è¯æäºè¿å¶çæ ¼å¼ï¼ä½¿ä»£ç è¿è¡é度æ´å¿«ãå°½ç®¡å¦æ¤ï¼JavaScript ä»ç¶æ¯ä¸é¨è§£éåè¯è¨ï¼å 为ç¼è¯è¿ç¨åçå¨ä»£ç è¿è¡ä¸ï¼èéä¹åã
两ç§ç±»åçè¯è¨åæä¼å¿ï¼è¿ä¸ªé®é¢æä»¬æä¸ä¸è°ã
æå¡å¨ç«¯ä»£ç vs 客æ·ç«¯ä»£ç ä½ æè®¸è¿å¬è¯´è¿æå¡å¨ç«¯ï¼server-sideï¼å客æ·ç«¯ï¼client-sideï¼ä»£ç è¿ä¸¤ä¸ªæ¯è¯ï¼å°¤å ¶æ¯å¨ web å¼åæ¶ã客æ·ç«¯ä»£ç æ¯å¨ç¨æ·ççµèä¸è¿è¡ç代ç ï¼å¨æµè§ä¸ä¸ªç½é¡µæ¶ï¼å®ç客æ·ç«¯ä»£ç å°±ä¼è¢«ä¸è½½ï¼ç¶åç±æµè§å¨æ¥è¿è¡å¹¶å±ç¤ºã卿¬æ¨¡åä¸æä»¬è®¨è®ºçä¸»è¦æ¯å®¢æ·ç«¯ JavaScriptã
èæå¡å¨ç«¯ä»£ç 卿å¡å¨ä¸è¿è¡ï¼ç¶åè¿è¡ç»ææç±æµè§å¨ä¸è½½å¹¶å±ç¤ºåºæ¥ãæµè¡çæå¡å¨ç«¯ web è¯è¨å æ¬ï¼PHPãPythonãRubyãASP.NETï¼çè³æ JavaScriptï¼JavaScript ä¹å¯ç¨ä½æå¡å¨ç«¯è¯è¨ï¼æ¯å¦ç°å¨æµè¡ç Node.js ç¯å¢ï¼ä½ å¯ä»¥å¨æä»¬ç卿ç½é¡µââæå¡å¨ç«¯ç¼ç¨ä¸»é¢ä¸æ¾å°æ´å¤å ³äºæå¡å¨ç«¯ JavaScript çç¥è¯ã
卿代ç vs éæä»£ç 卿ä¸è¯æ¢éç¨äºå®¢æ·ç«¯ JavaScriptï¼åéç¨äºæè¿°æå¡å¨ç«¯è¯è¨ã宿¯æéè¿æéçææ°å å®¹æ¥æ´æ° web 页颿åºç¨ï¼ä½¿å¾ä¸åç¯å¢ä¸å¯ä»¥æ¾ç¤ºåºä¸åå 容ãæå¡å¨ç«¯ä»£ç ä¼å¨æå¡å¨ä¸å¨æçææ°å 容ï¼ä¾å¦ä»æ°æ®åºä¸æåä¿¡æ¯ãè客æ·ç«¯ JavaScript åå¨ç¨æ·ç«¯æµè§å¨ä¸å¨æçææ°å 容ï¼ä¾å¦å建ä¸ä¸ªæ°ç HTML è¡¨æ ¼ï¼ç¨ä»æå¡å¨è¯·æ±å°çæ°æ®å¡«å ï¼ç¶åå¨ç½é¡µä¸åç¨æ·å±ç¤ºè¿ä¸ªè¡¨æ ¼ãä¸¤ç§æ åµçæä¹ç¥æä¸åï¼ä½åææå ³èï¼ä¸ä¸¤è ï¼æå¡å¨ç«¯å客æ·ç«¯ï¼ç»å¸¸ååå·¥ä½ã
没æå¨ææ´æ°å 容çç½é¡µå«åéæé¡µé¢ï¼ææ¾ç¤ºçå 容ä¸ä¼æ¹åã
ææ ·å页颿·»å JavaScriptï¼å¯ä»¥åæ·»å CSS 飿 ·å° JavaScript æ·»å å° HTML 页é¢ä¸ãCSS ä½¿ç¨ <link>
å
ç´ é¾æ¥å¤é¨æ ·å¼è¡¨ï¼ä½¿ç¨ <style>
å
ç´ å HTML åµå
¥å
鍿 ·å¼è¡¨ï¼è JavaScript è¿éåªéä¸ä¸ªå
ç´ ââ<script>
ãæä»¬æ¥çç宿¯æä¹å·¥ä½çã
é¦å ï¼ä¸è½½ç¤ºä¾æä»¶ apply-javascript.htmlãæ¾å¨ä¸ä¸ªæ¹ä¾¿çæä»¶å¤¹éã
åå«å¨æµè§å¨åææ¬ç¼è¾å¨ä¸æå¼è¿ä¸ªæä»¶ãä½ ä¼çå°è¿ä¸ª HTML æä»¶å建äºä¸ä¸ªç®åçç½é¡µï¼å ¶ä¸æä¸ä¸ªå¯ç¹å»æé®ã
æ¥ä¸æ¥ï¼æå¼ææ¬ç¼è¾å¨ï¼å¨æ£æåºé¨ââå°±å¨ç»ææ ç¾ </body>
ä¹åââæ·»å 以ä¸å
容ï¼
<script>
// 卿¤ç¼å JavaScript 代ç
</script>
请注æï¼Web ææ¡£ä¸ï¼ä»£ç éå¸¸æ¯æå ¶å¨é¡µé¢ä¸åºç°ç顺åºå è½½åæ§è¡ãéè¿æ JavaScript æ¾å¨åºé¨ï¼æ¥ç¡®ä¿ææç HTML å ç´ å®æå è½½ï¼è¯·åé ä¸é¢çèæ¬å è½½çç¥ï¼ã
ä¸é¢ï¼å¨ <script>
å
ç´ ä¸æ·»å ä¸äº JavaScript 代ç ï¼è¿ä¸ªé¡µé¢å°±è½åä¸äºæ´æè¶£çäºãå¨â// 卿¤ç¼å JavaScript 代ç âä¸è¡ä¸æ¹æ·»å 以ä¸ä»£ç ï¼
document.addEventListener("DOMContentLoaded", () => {
function createParagraph() {
const para = document.createElement("p");
para.textContent = "ä½ ç¹å»äºæé®ï¼";
document.body.appendChild(para);
}
const buttons = document.querySelectorAll("button");
for (const button of buttons) {
button.addEventListener("click", createParagraph);
}
});
ä¿åæä»¶å¹¶å·æ°æµè§å¨ï¼ç¶åä½ ä¼åç°ï¼ç¹å»æé®ææ¡£ä¸æ¹å°ä¼æ·»å ä¸ä¸ªæ°æ®µè½ã
夿³¨ï¼ å¦æç¤ºä¾ä¸è½æ£å¸¸å·¥ä½ï¼è¯·ä¾æ¬¡æ£æ¥æææ¥éª¤ï¼å¹¶ä¿è¯æ²¡æçº°æ¼ãåå§æä»¶æ¯å¦ä»¥ .html
为æ©å±åä¿åå°æ¬å°äºï¼</body>
æ ç¾åæ¯å¦æ·»å äº <script>
å
ç´ ï¼JavaScript 代ç è¾å
¥æ¯å¦æ£ç¡®ï¼JavaScript æ¯åºå大å°åçï¼èä¸éå¸¸ç²¾ç¡®ï¼æä»¥ä½ éè¦åç¡®æ 误å°è¾å
¥æç¤ºç奿³ï¼å¦åå¯è½ä¼åºéã
夿³¨ï¼ ä½ å¯ä»¥å¨ GitHub 䏿¥çæ¤çæ¬ apply-javascript-internal.htmlï¼ä¹å¯å¨çº¿æ¥çï¼ã
å¤é¨ JavaScriptè¿å¾ä¸éï¼ä½æ¯è½ä¸è½æ JavaScript ä»£ç æ¾ç½®å¨ä¸ä¸ªå¤é¨æä»¶ä¸å¢ï¼ç°å¨æä»¬æ¥ç ç©¶ä¸ä¸ã
é¦å
ï¼å¨åæç HTML æä»¶æå¨çç®å½ä¸å建ä¸ä¸ªå为 script.js
çæ°æä»¶ãè¯·ç¡®ä¿æ©å±å为 .js
ï¼åªæè¿æ ·æè½è¢«è¯å«ä¸º JavaScript 代ç ã
ç§»é¤å½åä½äº </body>
åºé¨ç <script>
å
ç´ ï¼å¹¶ä¸å¨ç»ææ ç¾ </head>
ä¹åæ·»å 以ä¸å
容ï¼è¿æ ·æµè§å¨å°±è½æ¯å¨åºé¨æ¶æ´å¿«å¼å§å è½½æä»¶ï¼ï¼
<script type="module" src="script.js"></script>
å¨ script.js
æä»¶ä¸ï¼æ·»å ä¸é¢çèæ¬ï¼
function createParagraph() {
const para = document.createElement("p");
para.textContent = "ä½ ç¹å»äºæé®ï¼";
document.body.appendChild(para);
}
const buttons = document.querySelectorAll("button");
for (const button of buttons) {
button.addEventListener("click", createParagraph);
}
ä¿åå¹¶å·æ°æµè§å¨ãå°±ä¼åç°ç¹å»æé®ä¸èµ·ä½ç¨ï¼å¦ææ£æ¥æµè§å¨æ§å¶å°ï¼ä¼çè§ç±»ä¼¼ Cross-origin request blocked
çé误ãè¿æ¯å 为ä¸è®¸å¤å¤é¨èµæºä¸æ ·ï¼JavaScript 模åéè¦ä»ä¸ HTML åæºçå°æ¹å è½½ï¼å¹¶ä¸ file://
URL ä¸ç¬¦åæ¡ä»¶ãæä¸¤ä¸ªè§£å³æ¹æ¡å¯ä»¥è§£å³è¿ä¸ªé®é¢ï¼
8000
ç«¯å£æä¾æä»¶ apply-javascript-external.html
å script.js
ï¼æå¼æµè§å¨å¹¶è®¿é® http://localhost:8000
ã<script defer src="script.js"></script>
ä»£æ¿ <script type="module" src="script.js"></script>
ãäºè§£æ´å¤ä¿¡æ¯è¯·åé
ä¸é¢çèæ¬å è½½çç¥ã使¯æ³¨æï¼æ¬æç¨å
¶ä»é¨å使ç¨çç¹æ§å¯è½éè¦æ¬å° HTTP æå¡å¨ãç°å¨ç½ç«åä¹å䏿 ·äºï¼ä½æ¯æä»¬ç JavaScript æ¾å¨äºä¸ä¸ªå¤é¨æä»¶ãä¸è¬æ¥è¯´ï¼è¿å¯¹ç»ç»ä»£ç å¹¶å¨å¤ä¸ª HTML æä»¶ä¸å¤ç¨æ¥è¯´æ¯ä¸ä»¶å¥½äºãæ¤å¤ï¼æ²¡æå¤§æ®µèæ¬ç HTML æ´å®¹æé 读ã
夿³¨ï¼ ä½ å¯ä»¥å¨ GitHub 䏿¥ç apply-javascript-external.html 以å script.jsï¼ä¹å¯å¨çº¿æ¥çï¼ã
å è JavaScript å¤ç卿³¨æï¼ææ¶åä½ ä¼éå°å¨ HTML ä¸åå¨çä¸ä¸çå®ç JavaScript 代ç ãå®æè®¸çä¸å»åè¿æ ·ï¼
function createParagraph() {
const para = document.createElement("p");
para.textContent = "ä½ ç¹å»äºæé®ï¼";
document.body.appendChild(para);
}
<button onclick="createParagraph()">ç¹æï¼</button>
ä½ å¯ä»¥å¨ä¸é¢å°è¯è¿ä¸ªçæ¬çæ¼ç¤ºã
è¿ä¸ªæ¼ç¤ºä¸ä¹åç两个åè½å®å
¨ä¸è´ï¼åªæ¯å¨ <button>
å
ç´ ä¸å
å«äºä¸ä¸ªå
èç onclick
å¤çå¨ï¼ä½¿å¾å½æ°å¨æé®è¢«æä¸æ¶è¿è¡ã
ç¶è请ä¸è¦è¿æ ·åãè¿å°ä½¿ JavaScript 污æäº HTMLï¼è䏿çä½ä¸ãå¯¹äºæ¯ä¸ªéè¦åºç¨ JavaScript çæé®ï¼ä½ é½å¾æå¨æ·»å onclick="createParagraph()"
屿§ã
ä¸å
¶å¨ HTML ä¸å
å« JavaScriptï¼ä¸å¦ä½¿ç¨çº¯ JavaScript æé ãéè¿ querySelectorAll()
彿°ï¼å¯ä»¥éæ©é¡µé¢ä¸çæææé®ãç¶åå¯ä»¥å¾ªç¯éåè¿äºæé®ï¼ä½¿ç¨ addEventListener()
为æ¯ä¸ªæé®åé
ä¸ä¸ªå¤çå¨ã代ç å¦ä¸æç¤ºï¼
const buttons = document.querySelectorAll("button");
for (let i = 0; i < buttons.length; i++) {
buttons[i].addEventListener("click", createParagraph);
}
è¿æ ·åä¹ç廿¯ onclick
屿§è¦é¿ä¸äºï¼ä½æ¯è¿æ ·åä¼å¯¹é¡µé¢ä¸æææé®çæï¼æ 论å¤å°ä¸ªï¼ææ·»å æå é¤ï¼å®å
¨æ éä¿®æ¹ JavaScript 代ç ã
夿³¨ï¼ 请å°è¯ä¿®æ¹ apply-javascript.html
ä»¥æ·»å æ´å¤æé®ãå·æ°åå¯åç°æä¸ä»»ä¸æé®æ¶é½ä¼å建ä¸ä¸ªæ®µè½ãè¿æ ·å¾é«æå§ï¼
页é¢ä¸çææ HTML 代ç é½æå ¶åºç°ç顺åºå è½½ãå¦æä½¿ç¨ JavaScript 廿ä½é¡µé¢ä¸çå ç´ ï¼æ´åç¡®çè¯´ï¼æ¯ææ¡£å¯¹è±¡æ¨¡åï¼ï¼é£ä¹å¦æ JavaScript å¨ HTML ä¹å就被å è½½åè§£æäºï¼ä»£ç å°æ æ³è¿è¡ã
æå ç§ä¸åççç¥æ¥ç¡®ä¿ JavaScript åªå¨ HTML è§£æä¹åè¿è¡ï¼
å¨ä¸é¢çå é¨ JavaScript 示ä¾ä¸ï¼èæ¬å ç´ æ¾å¨ææ¡£æ£æçåºé¨ï¼å æ¤åªè½å¨ HTML æ£æçå ¶ä»é¨å被解æä»¥åè¿è¡ã
å¨ä¸é¢çå¤é¨ JavaScript å®ä¾ä¸ï¼èæ¬å
ç´ æ¾å¨ææ¡£ç头é¨ï¼å¨è§£æ HTML æ£æä¹åè§£æã使¯ç±äºæä»¬ä½¿ç¨äº <script type="module">
ï¼ä»£ç 被è§ä¸ºä¸ä¸ªæ¨¡åï¼å¹¶ä¸æµè§å¨å¨æ§è¡ JavaScript 模åä¹åä¼çå¾
ææç HTML 代ç é½å¤ç宿¯ï¼ä¹å¯ä»¥æå¤é¨èæ¬æ¾å¨æ£æçåºé¨ï¼ä½æ¯å¦æ HTML å
容è¾å¤ä¸ç½ç»è¾æ
¢ï¼å¨æµè§å¨å¼å§è·åå¹¶å è½½èæ¬ä¹åå¯è½éè¦å¤§éçæ¶é´ï¼å æ¤å°å¤é¨èæ¬æ¾å¨å¤´é¨é叏伿´å¥½ä¸äºï¼ã
妿ä»ç¶æ³å¨ææ¡£å¤´é¨ä½¿ç¨é模åèæ¬ï¼å¯è½é»å¡æ´ä¸ªé¡µé¢çæ¾ç¤ºï¼å¹¶ä¸å¯è½åºç°é误ï¼å ä¸ºèæ¬å¨ææ¡£è§£æä¹åæ§è¡ï¼
<script>
å
ç´ ä¸æ·»å defer
ï¼æè
妿ä¸éè¦ HTML è§£æå®æï¼åå¯ä»¥ä½¿ç¨ async
ï¼å±æ§ãDOMContextLoaded
äºä»¶çå¬å¨ä¸ãè¿è¶
åºäºæ¬æç¨çèå´ï¼é¤éä½ éè¦æ¯æé常èçæµè§å¨ï¼å¦åä¸è¦è¿æ ·åï¼ä½¿ç¨ <script type="module">
代æ¿å³å¯ã
å°±å HTML å CSSï¼JavaScript 代ç ä¸ä¹å¯ä»¥æ·»å 注éï¼æµè§å¨ä¼å¿½ç¥å®ä»¬ï¼æ³¨éåªæ¯ä¸ºä½ çåäºï¼è¿æä½ ï¼å¦æåå¹´ååçèªå·±åç代ç ï¼è¿ä¼è®°å¾å ¶ä¸çå«ä¹åï¼æä¾å ³äºä»£ç å¦ä½å·¥ä½çæå¼ã注éé常æç¨ï¼èä¸åºè¯¥ç»å¸¸ä½¿ç¨ï¼å°¤å ¶å¨å¤§ååºç¨ä¸ã注éå为两类ï¼
å¨åææ ï¼//ï¼åæ·»å åè¡æ³¨éï¼æ¯å¦ï¼
å¨ /*
å */
ä¹é´æ·»å å¤è¡æ³¨éï¼æ¯å¦ï¼
/*
æä¹æ¯
䏿¡æ³¨é
*/
æ¯å¦è¯´ï¼æä»¬å¯ä»¥è¿æ ·ä¸ºä¸ä¸ä¸ªæ¼ç¤ºæ·»å 注éï¼
// 彿°ï¼å建ä¸ä¸ªæ°ç段è½å¹¶æ·»å è³ HTML body åºé¨ã
function createParagraph() {
const para = document.createElement("p");
para.textContent = "ä½ ç¹äºè¿ä¸ªæé®ï¼";
document.body.appendChild(para);
}
/*
1. åå¾é¡µé¢ä¸æææé®çå¼ç¨å¹¶å°å®ä»¬ç½®äºä¸ä¸ªæ°ç»ä¸ã
2. éè¿ä¸ä¸ªå¾ªç¯ä¸ºæ¯ä¸ªæé®æ·»å ä¸ä¸ªç¹å»äºä»¶ççå¬å¨ã
彿é®è¢«ç¹å»æ¶ï¼è°ç¨ createParagraph() 彿°ã
*/
const buttons = document.querySelectorAll("button");
for (const button of buttons) {
button.addEventListener("click", createParagraph);
}
夿³¨ï¼ ä¸è¬æ¥è¯´ï¼æ³¨éè¶å¤è¶å¥½ï¼ä½å¦æä½ åç°èªå·±æ·»å äºå¤§éæ³¨éæ¥è§£éå鿝ä»ä¹ï¼åéåä¹è®¸åºè¯¥æ´ç´è§ï¼ï¼æè è§£éé常ç®åçæä½ï¼ä¹è®¸ä»£ç è¿äºå¤æï¼ï¼é£ä¹å°±åºè¯¥å°å¿äºã
æ»ç»æåä½ ï¼è¿åºäºæ¢ç´¢ JavaScript ä¸ççç¬¬ä¸æ¥ãæä»¬ä»ç论å¼å§ï¼ä»ç»ä¸ºä»ä¹è¦ä½¿ç¨ JavaScriptï¼ä»¥åç¨å®è½åä»ä¹äºæ ãè¿ç¨ä¸ç©¿æäºä¸äºä»£ç 示ä¾å¹¶è®²è§£äº JavaScript å¦ä½ä¸ç½ç«ä¸å ¶ä»ä»£ç éé ï¼ççã
ç°å¨ 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