# 【Day13】範圍scope ###### tags: `JavaScript` `14th鐵人賽` 在介紹變數時有提到函式內作用、區域內作用,也就是本篇文會介紹的內容: - 區域變數、全域變數介紹、差別 - 範例 --- ## 範圍 JavaScript中變數作用的範圍分為區域變數、全域變數,而**影響變數有效範圍的最小單位是function。** 以簡易的敘述來介紹範圍: 小狗想要在學校圖書館找到一本論文 順利訪問:在圖書館內詢問服務台,此時書的位置是在作用範圍內 不順利訪問:在走廊詢問路人:我想要的書XXX在哪邊呢?此時需要的信息與索取訊息的位置不同,路人表示問號(?? ## 兩者差別 - 區域變數:在function中宣告的變數,只能提供所屬函式內使用,無法在函式外呼叫 - 全域變數:不在特定範疇內,可在程序任何位置被訪問 ```jsx let count = 0; //宣告記錄用 function test(){ // count++; //在函式中使用count,而函式中無count的值,因此向外尋找 } test(); // 找到test的程式碼並執行 console.log(`紀錄${count}次`) ``` 在這個範例中可以發現function可以讀取外層已宣告的變數,當此函式外層找不到時,會再往下一層外層尋找,若仍找不到則會出現錯誤訊息。 ## 多層的變數宣告 ```jsx let a = 1; // 於最外層的變數宣告 function x() { let b = 2; console.log(b); function y() { let c = 3; console.log(c); function z() { let d = 4; console.log(d); console.log(c); } z(); } y(); } x(); console.log(a); // 1 console.log(b); // b is not defined console.log(c); // c is not defined console.log(d); // d is not defined ``` 在這個範例中只有a是全域變數,因**外層無法取得內層宣告的變數**,因此我們無法在函式外訪問b、c、d的變數 此外也可以看到在y( )、z( )中皆可訪問變數c的值 以上為本次範圍的介紹,若有問題歡迎指教!