å¨ç¼åæ´å¤æç代ç åï¼è®©æä»¬å æ¥èèè°è¯å§ã
è°è¯ æ¯æå¨ä¸ä¸ªèæ¬ä¸æ¾åºå¹¶ä¿®å¤é误çè¿ç¨ãææçç°ä»£æµè§å¨å大夿°å ¶ä»ç¯å¢é½æ¯æè°è¯å·¥å · ââ å¼åè å·¥å ·ä¸çä¸ä¸ªä»¤è°è¯æ´å 容æçç¹æ®ç¨æ·çé¢ãå®ä¹å¯ä»¥è®©æä»¬ä¸æ¥æ¥å°è·è¸ªä»£ç 以æ¥çå½åå®é è¿è¡æ åµã
å¨è¿éæä»¬å°ä¼ä½¿ç¨ Chromeï¼è°·ææµè§å¨ï¼ï¼å ä¸ºå®æ¥æè¶³å¤å¤çåè½ï¼å ¶ä»å¤§é¨åæµè§å¨çåè½ä¹ä¸ä¹ç±»ä¼¼ã
âèµæºï¼Sourcesï¼â颿¿
ä½ ç Chrome çæ¬å¯è½çèµ·æ¥æä¸ç¹ä¸åï¼ä½æ¯å®åºè¯¥è¿æ¯å¤äºå¾ææ¾çä½ç½®ã
- å¨ Chrome ä¸æå¼ ç¤ºä¾é¡µé¢ã
- 使ç¨å¿«æ·é® F12ï¼Macï¼Cmd+Opt+Iï¼æå¼å¼åè å·¥å ·ã
- éæ©
Sourcesï¼èµæºï¼é¢æ¿ã
å¦æä½ æ¯ç¬¬ä¸æ¬¡è¿ä¹åï¼é£ä½ åºè¯¥ä¼çå°ä¸é¢è¿ä¸ªæ ·åï¼
忢æé® 伿弿件å表çé项å¡ã
让æä»¬å¨é¢è§æ ä¸ç¹å»åéæ© hello.jsãè¿éåºè¯¥ä¼å¦ä¸å¾æç¤ºï¼
èµæºï¼Sourcesï¼é¢æ¿å å«ä¸ä¸ªé¨åï¼
- æä»¶å¯¼èªï¼File Navigatorï¼ åºåååºäº HTMLãJavaScriptãCSS åå æ¬å¾çå¨å çå ¶ä»ä¾éäºæ¤é¡µé¢çæä»¶ãChrome æ©å±ç¨åºä¹ä¼æ¾ç¤ºå¨è¿ã
- 代ç ç¼è¾ï¼Code Editorï¼ åºåå±ç¤ºæºç ã
- JavaScript è°è¯ï¼JavaScript Debuggingï¼ åºåæ¯ç¨äºè°è¯çï¼æä»¬å¾å¿«å°±ä¼æ¥æ¢ç´¢å®ã
ç°å¨ä½ å¯ä»¥å次ç¹å»åæ¢æé® éèèµæºå表æ¥ç»ä»£ç è ¾åºä¸äºç©ºé´ã
æ§å¶å°ï¼Consoleï¼
妿æä»¬æä¸ Escï¼ä¸é¢ä¼åºç°ä¸ä¸ªæ§å¶å°ï¼æä»¬å¯ä»¥è¾å ¥ä¸äºå½ä»¤ç¶åæä¸ Enter æ¥æ§è¡ã
è¯å¥æ§è¡å®æ¯ä¹åï¼å ¶æ§è¡ç»æä¼æ¾ç¤ºå¨ä¸é¢ã
ä¾å¦ï¼1+2 å°ä¼è¿å 3ï¼è hello("debugger") 彿°è°ç¨ä»ä¹ä¹æ²¡è¿åï¼æä»¥ç»ææ¯ undefinedï¼
æç¹ï¼Breakpointsï¼
æä»¬æ¥çç 示ä¾é¡µé¢ åçäºä»ä¹ãå¨ hello.js ä¸ï¼ç¹å»ç¬¬ 4 è¡ãæ¯çï¼å°±ç¹å»æ°å "4" ä¸ï¼ä¸æ¯ç¹å»ä»£ç ã
æåä½ ï¼ä½ å·²ç»è®¾ç½®äºä¸ä¸ªæç¹ãç°å¨ï¼è¯·å¨ç¬¬ 8 è¡çæ°åä¸ä¹ç¹å»ä¸ä¸ã
çèµ·æ¥åºè¯¥æ¯è¿æ ·çï¼èè²æ¯ä½ åºè¯¥ç¹å»çå°æ¹ï¼ï¼
æç¹ æ¯è°è¯å¨ä¼èªå¨æå JavaScript æ§è¡çå°æ¹ã
å½ä»£ç 被æåæ¶ï¼æä»¬å¯ä»¥æ£æ¥å½åçåéï¼å¨æ§å¶å°æ§è¡å½ä»¤ççãæ¢å¥è¯è¯´ï¼æä»¬å¯ä»¥è°è¯å®ã
æä»¬æ»æ¯å¯ä»¥å¨å³ä¾§ç颿¿ä¸æ¾å°æç¹çå表ã彿们卿°ä¸ªæä»¶ä¸æè®¸å¤æç¹æ¶ï¼è¿æ¯é常æç¨çãå®å 许æä»¬ï¼
- å¿«é跳转è³ä»£ç ä¸çæç¹ï¼éè¿ç¹å»å³ä¾§é¢æ¿ä¸ç对åºçæç¹ï¼ã
- éè¿åæ¶éä¸æç¹æ¥ä¸´æ¶ç¦ç¨å¯¹åºçæç¹ã
- éè¿å³é®åå»å¹¶éæ©ç§»é¤æ¥å é¤ä¸ä¸ªæç¹ã
- â¦â¦ççã
å¨è¡å·ä¸ å³é®åå» å è®¸ä½ å建ä¸ä¸ª æ¡ä»¶ æç¹ãåªæå½ç»å®ç表达å¼ï¼ä½ å建æ¡ä»¶æç¹æ¶æä¾ç表达å¼ï¼ä¸ºçæ¶æä¼è¢«è§¦åã
彿们éè¦å¨ç¹å®çåéå¼æåæ°çæ åµä¸æåç¨åºæ§è¡æ¶ï¼è¿ç§è°è¯æ¹æ³å°±å¾æç¨äºã
âdebuggerâ å½ä»¤
æä»¬ä¹å¯ä»¥ä½¿ç¨ debugger å½ä»¤æ¥æå代ç ï¼åè¿æ ·ï¼
function hello(name) {
let phrase = `Hello, ${name}!`;
debugger; // <-- è°è¯å¨ä¼å¨è¿åæ¢
say(phrase);
}
è¿æ ·çå½ä»¤åªæå¨å¼åè å·¥å ·æå¼æ¶æææï¼å¦åæµè§å¨ä¼å¿½ç¥å®ã
æåå¹¶æ¥ç
卿们çä¾åä¸ï¼hello() 彿°å¨é¡µé¢å è½½æé´è¢«è°ç¨ï¼å æ¤æ¿æ´»è°è¯å¨çæç®åçæ¹æ³ï¼å¨æä»¬å·²ç»è®¾ç½®äºæç¹åï¼å°±æ¯ ââ éæ°å 载页é¢ãå æ¤è®©æä»¬æä¸ F5ï¼Windowsï¼Linuxï¼æ Cmd+Rï¼Macï¼å§ã
设置æç¹ä¹åï¼ç¨åºä¼å¨ç¬¬ 4 è¡æåæ§è¡ï¼
请æå¼å³ä¾§çä¿¡æ¯ä¸æå表ï¼ç®å¤´æç¤ºåºçå°æ¹ï¼ãè¿éå è®¸ä½ æ¥çå½åç代ç ç¶æï¼
-
å¯çï¼Watchï¼ââ æ¾ç¤ºä»»æè¡¨è¾¾å¼çå½åå¼ãä½ å¯ä»¥ç¹å»å å·
+ç¶åè¾å ¥ä¸ä¸ªè¡¨è¾¾å¼ãè°è¯å¨å°æ¾ç¤ºå®çå¼ï¼å¹¶å¨æ§è¡è¿ç¨ä¸èªå¨éæ°è®¡ç®è¯¥è¡¨è¾¾å¼ã -
è°ç¨æ ï¼Call Stackï¼ââ æ¾ç¤ºåµå¥çè°ç¨é¾ãæ¤æ¶ï¼è°è¯å¨æ£å¨
hello()çè°ç¨é¾ä¸ï¼è¢«index.htmlä¸çä¸ä¸ªèæ¬è°ç¨ï¼è¿é没æå½æ°ï¼å æ¤æ¾ç¤º âanonymousâï¼å¦æä½ ç¹å»äºä¸ä¸ªå æ 项ï¼è°è¯å¨å°è·³å°å¯¹åºç代ç å¤ï¼å¹¶ä¸è¿å¯ä»¥æ¥çå ¶ææåéã
-
ä½ç¨åï¼Scopeï¼ââ æ¾ç¤ºå½åçåéãLocalæ¾ç¤ºå½å彿°ä¸çåéï¼ä½ è¿å¯ä»¥å¨æºä»£ç ä¸çå°å®ä»¬çå¼é«äº®æ¾ç¤ºäºåºæ¥ãGlobalæ¾ç¤ºå ¨å±åéï¼ä¸å¨ä»»ä½å½æ°ä¸ï¼ãè¿éè¿æä¸ä¸ª
thiså ³é®åï¼ç®åæä»¬è¿æ²¡æå¦å°å®ï¼ä¸è¿æä»¬å¾å¿«å°±ä¼å¦ä¹ å®äºã
è·è¸ªæ§è¡
ç°å¨æ¯ è·è¸ª èæ¬çæ¶åäºã
å¨å³ä¾§é¢æ¿ç顶鍿¯ä¸äºå ³äºè·è¸ªèæ¬çæé®ã让æä»¬æ¥ä½¿ç¨å®ä»¬å§ã
- ââ âæ¢å¤ï¼Resumeï¼âï¼ç»§ç»æ§è¡ï¼å¿«æ·é® F8ã
-
ç»§ç»æ§è¡ãå¦ææ²¡æå ¶ä»çæç¹ï¼é£ä¹ç¨åºå°±ä¼ç»§ç»æ§è¡ï¼å¹¶ä¸è°è¯å¨ä¸ä¼åæ§å¶ç¨åºã
æä»¬ç¹å»å®ä¸ä¸ä¹åï¼æä»¬ä¼çå°è¿æ ·çæ åµï¼
æ§è¡æ¢å¤äºï¼æ§è¡å°
say()彿°ä¸çå¦å¤ä¸ä¸ªæç¹åæåå¨äºé£éãçä¸ä¸å³è¾¹ç âCall stackâãå®å·²ç»å¢å äºä¸ä¸ªè°ç¨ä¿¡æ¯ãæä»¬ç°å¨å¨say()éé¢ã - ââ âä¸ä¸æ¥ï¼Stepï¼âï¼è¿è¡ä¸ä¸æ¡ï¼å³å½åè¡ï¼æä»¤ï¼å¿«æ·é® F9ã
-
è¿è¡ä¸ä¸æ¡è¯å¥ã妿æä»¬ç°å¨ç¹å»å®ï¼
alertä¼è¢«æ¾ç¤ºåºæ¥ã䏿¬¡æ¥ä¸æ¬¡å°ç¹å»æ¤æé®ï¼æ´ä¸ªèæ¬çææè¯å¥ä¼è¢«é个æ§è¡ã
- ââ âè·¨æ¥ï¼Step overï¼âï¼è¿è¡ä¸ä¸æ¡ï¼å³å½åè¡ï¼æä»¤ï¼ä½ ä¸ä¼è¿å ¥å°ä¸ä¸ªå½æ°ä¸ï¼å¿«æ·é® F10ã
-
è·ä¸ä¸æ¡å½ä»¤âä¸ä¸æ¥ï¼Stepï¼â类似ï¼ä½å¦æä¸ä¸æ¡è¯å¥æ¯å½æ°è°ç¨å表ç°ä¸åãè¿éç彿°æçæ¯ï¼ä¸æ¯å 建çå¦
alert彿°çï¼èæ¯æä»¬èªå·±åç彿°ã妿æä»¬å¯¹æ¯ä¸ä¸ï¼âä¸ä¸æ¥ï¼Stepï¼âå½ä»¤ä¼è¿å ¥åµå¥å½æ°è°ç¨å¹¶å¨å ¶ç¬¬ä¸è¡æåæ§è¡ï¼èâè·¨æ¥ï¼Step overï¼â对æä»¬ä¸å¯è§å°æ§è¡åµå¥å½æ°è°ç¨ï¼è·³è¿äºå½æ°å é¨ã
æ§è¡ä¼å¨è¯¥å½æ°è°ç¨åç«å³æåã
妿æä»¬å¯¹è¯¥å½æ°çå 鍿§è¡ä¸æå ´è¶£ï¼è¿å½ä»¤ä¼å¾æç¨ã
- ââ âæ¥å ¥ï¼Step intoï¼âï¼å¿«æ·é® F11ã
-
åâä¸ä¸æ¥ï¼Stepï¼â类似ï¼ä½å¨å¼æ¥å½æ°è°ç¨æ åµä¸è¡¨ç°ä¸åãå¦æä½ ååæå¼å§å¦ JavaScriptï¼é£ä¹ä½ å¯ä»¥å å¿½ç¥æ¤å·®å¼ï¼å 为æä»¬è¿æ²¡æç¨å°å¼æ¥è°ç¨ã
è³äºä¹åï¼åªéè¦è®°ä½âä¸ä¸æ¥ï¼Stepï¼âå½ä»¤ä¼å¿½ç¥å¼æ¥è¡ä¸ºï¼ä¾å¦
setTimeoutï¼è®¡åç彿°è°ç¨ï¼ï¼å®ä¼è¿ä¸æ®µæ¶é´åæ§è¡ãèâæ¥å ¥ï¼Step intoï¼âä¼è¿å ¥å°ä»£ç ä¸å¹¶çå¾ ï¼å¦æéè¦ï¼ãè¯¦è§ DevTools æåã - ââ âæ¥åºï¼Step outï¼âï¼ç»§ç»æ§è¡å°å½å彿°çæ«å°¾ï¼å¿«æ·é® Shift+F11ã
-
ç»§ç»æ§è¡å½å彿°å çå©ä½ä»£ç ï¼å¹¶æåå¨è°ç¨å½å彿°çä¸ä¸è¡ä»£ç å¤ãå½æä»¬ä½¿ç¨ å¶ç¶å°è¿å ¥å°ä¸ä¸ªåµå¥è°ç¨ï¼ä½æ¯æä»¬å对è¿ä¸ªå½æ°ä¸æå ´è¶£æ¶ï¼æä»¬æ³è¦å°½å¯è½çç»§ç»æ§è¡å°æåçæ¶åæ¯é常æ¹ä¾¿çã
- ââ å¯ç¨/ç¦ç¨ææçæç¹ã
-
è¿ä¸ªæé®ä¸ä¼å½±åç¨åºçæ§è¡ãåªæ¯ä¸ä¸ªæ¹éæä½æç¹çå¼/å ³ã
- ââ å¯ç¨/ç¦ç¨åºç°é误æ¶èªå¨æåèæ¬æ§è¡ã
-
å½å¯å¨æ¤åè½ï¼å¦æå¼åè å·¥å ·æ¯æå¼ççæ¶åï¼ä»»ä½èæ¬æ§è¡é误é½ä¼å¯¼è´è¯¥èæ¬æ§è¡èªå¨æåãç¶åæä»¬å¯ä»¥å¨è°è¯å¨ä¸åæå鿥çä¸ä¸ä»ä¹åºéäºãå æ¤å¦ææä»¬çèæ¬å 为é误ææçæ¶åï¼æä»¬å¯ä»¥æå¼è°è¯å¨ï¼å¯ç¨è¿ä¸ªé项ç¶åé载页é¢ï¼æ¥çä¸ä¸åªé导è´å®ææäºå彿¶çä¸ä¸ææ¯ä»ä¹ã
å¨ä»£ç ä¸çæä¸è¡ä¸å³é®ï¼å¨æ¾ç¤ºçå ³èèåï¼context menuï¼ä¸ç¹å»ä¸ä¸ªé常æç¨çå为 âContinue to hereâ çé项ã
å½ä½ æ³è¦ååç§»å¨å¾å¤æ¥å°æä¸è¡ä¸ºæ¢ï¼ä½æ¯åæå¾è®¾ç½®ä¸ä¸ªæç¹æ¶éå¸¸çæ¹ä¾¿ã
æ¥å¿è®°å½
æ³è¦è¾åºä¸äºä¸è¥¿å°æ§å¶å°ä¸ï¼console.log 彿°å¯ä»¥æ»¡è¶³ä½ ã
ä¾å¦ï¼å°ä» 0 å° 4 çå¼è¾åºå°æ§å¶å°ä¸ï¼
// æå¼æ§å¶å°æ¥æ¥ç
for (let i = 0; i < 5; i++) {
console.log("value", i);
}
æ®éç¨æ·çä¸å°è¿ä¸ªè¾åºï¼å®æ¯å¨æ§å¶å°éé¢çãè¦æ³çå°å® ââ è¦ä¹æå¼å¼åè å·¥å ·ä¸ç Consoleï¼æ§å¶å°ï¼é项å¡ï¼è¦ä¹å¨ä¸ä¸ªå ¶ä»çé项å¡ä¸æä¸ Escï¼è¿ä¼å¨ä¸æ¹æå¼ä¸ä¸ªæ§å¶å°ã
妿æä»¬å¨ä»£ç ä¸æè¶³å¤çæ¥å¿è®°å½ï¼é£ä¹æä»¬å¯ä»¥ä»è®°å½ä¸çå°åååçäºä»ä¹ï¼èä¸éè¦åå©è°è¯å¨ã
æ»ç»
æä»¬å¯ä»¥çå°ï¼è¿éæ 3 ç§æ¹å¼æ¥æåä¸ä¸ªèæ¬ï¼
- æç¹ã
debuggerè¯å¥ã- errorï¼å¦æå¼åè å·¥å ·æ¯æå¼ç¶æï¼å¹¶ä¸æé® æ¯å¼å¯çç¶æï¼ã
å½èæ¬æ§è¡æåæ¶ï¼æä»¬å°±å¯ä»¥è¿è¡è°è¯ï¼æ£æ¥åéï¼è·è¸ªä»£ç æ¥æ¥çæ§è¡åºéçä½ç½®ã
å¼å人åå·¥å ·ä¸çéé¡¹æ¯æ¬æä»ç»çå¤å¾å¤ã宿´çæå请ç¹å»è¿ä¸ªé¾æ¥æ¥çï¼https://developers.google.com/web/tools/chrome-devtoolsã
æ¬ç« èçå 容足å¤è®©ä½ 䏿代ç è°è¯äºï¼ä½æ¯ä¹åï¼å°¤å ¶æ¯ä½ åäºå¤§éå ³äºæµè§å¨çä¸è¥¿åï¼æ¨èä½ æ¥çä¸é¢é£ä¸ªé¾æ¥ä¸è®²çå¼åè å·¥å ·æ´é«çº§çåè½ã
对äºï¼ä½ ä¹å¯ä»¥ç¹å»å¼åè å·¥å ·ä¸çå ¶ä»å°æ¹æ¥çä¸ä¸ä¼æ¾ç¤ºä»ä¹ãè¿å¯è½æ¯ä½ å¦ä¹ å¼åè å·¥å ·æå¿«çæ¹å¼äºãä¸è¦å¿äºè¿æå³é®åå»åå ³èèååã
è¯è®º
<code>æ ç¾æå ¥åªæå 个è¯ç代ç ï¼æå ¥å¤è¡ä»£ç å¯ä»¥ä½¿ç¨<pre>æ ç¾ï¼å¯¹äºè¶ è¿ 10 è¡ç代ç ï¼å»ºè®®ä½ ä½¿ç¨æ²ç®±ï¼plnkrï¼JSBinï¼codepenâ¦ï¼