本頁只練什麼
能說明 block、function 與 global 的變數可見範圍,並避免意外全域值。
範圍不清會造成命名碰撞、資料外洩與難以重現的跨功能狀態污染。
要修改的檔案:files/starter/main.js
定位:先找宣告所在的最小大括號範圍。|依 starter-3 定位,只修改「scope」的責任。
LESSON-14 · TOPIC 03
能說明 block、function 與 global 的變數可見範圍,並避免意外全域值。
能說明 block、function 與 global 的變數可見範圍,並避免意外全域值。
範圍不清會造成命名碰撞、資料外洩與難以重現的跨功能狀態污染。
要修改的檔案:files/starter/main.js
定位:先找宣告所在的最小大括號範圍。|依 starter-3 定位,只修改「scope」的責任。
先結果,再原理;完成後要能說出自己看見的證據。
兩個功能都使用 status 變數,後載入的程式覆蓋前一個。
起始狀態:測試尚未建立 lexical block。
insideValue 可讀、outsideError=ReferenceError、globalLeak=false。
驗收證據:insideValue=local、outsideError=ReferenceError、globalLeak=false
所有變數與函式設計,尤其事件處理器、迴圈與暫存狀態。
常見混淆:scope 是名稱可見性;closure 是函式保留其建立時 lexical environment 的能力。
這段程式是理解起點,不是要你直接跳過 Starter。
變數只能在宣告它的範圍和更裡面被看見。
正式說法:JavaScript 使用 lexical scope;let/const 具 block scope,function declaration/parameters 具 function scope。
在 if block 宣告 const inside,區塊外讀取會 ReferenceError。每一步都留下可觀察結果;如果沒看到,先看「卡住先查」。
檔案:files/starter/main.js 定位:先找宣告所在的最小大括號範圍。
要做:先重新載入 Starter,記錄目前畫面、DOM、Computed、Console 或文件內容。
預期:能指出「先找宣告所在的最小大括號範圍。」目前的缺口。
證據:保存 files/starter/main.js 的目前狀態,並指出下一步只會修改哪個檔案責任。
卡住先查:確認開啟的是 files/starter/main.js,且定位到 先找宣告所在的最小大括號範圍。。
檔案:files/starter/main.js 定位:先找宣告所在的最小大括號範圍。
要做:建立 block 變數,在內外各讀一次並檢查 window 是否洩漏同名值。
預期:insideValue 可讀、outsideError=ReferenceError、globalLeak=false。
證據:insideValue=local、outsideError=ReferenceError、globalLeak=false
卡住先查:先找宣告所在的最小大括號範圍。
檔案:files/starter/main.js 定位:先找宣告所在的最小大括號範圍。
要做:重新整理頁面,再逐項比對預期結果與 evidence。
預期:insideValue 可讀、outsideError=ReferenceError、globalLeak=false。
證據:insideValue=local、outsideError=ReferenceError、globalLeak=false
卡住先查:先找宣告所在的最小大括號範圍。
這個示範只讓你看懂概念,不會替你修改 Starter,也不會自動宣告完成。
勾選只是學習紀錄;真正完成仍要回到 Starter 的實際結果。
把宣告位置與讀取位置畫成內外兩層。
用 let/const 放在 block 中,區塊外以 try/catch 讀取。
完整解答與原因:在 block 內宣告 const inside,內部可讀;區塊外讀取捕捉 ReferenceError,window 也沒有該屬性,因為 lexical block scope 阻止名稱外洩。