---
# System prepended metadata

title: 變數/常數
tags: [JavaScript]

---

# 變數/常數
###### tags: `JavaScript`


- 變數
    - 就是存放「資料」的箱子，儲存在箱子裡的值會隨著我們程式處理的過程而==更動==。
    - 有點像生命體的概念，就像"人"一樣隨著時間而改變(長大)，每個階段都不一樣
- 常數
    - 裡面的東西不變
    - 石頭，無生命的東西

---

### 一、命名規則
1. 第一個字不能是數字
2. 有區分==大小寫== 
3. 可用中文(**盡量不要**)
4. 第一個字 可以為底線_
5. 不可定義保留字，例:let if =23;
:::info
讓程式碼易於閱讀的小規則
- 不要過長或過短
- 易於理解該變數在做什麼
- 用英文單字命名
- 不要使用易混淆的名稱(i,1,l)

識別字主要寫法
- camlCase 小駝峰寫法
    - 第一個英文字小寫，之後的單字第一個為大寫 EX:lastTime
- Pascal 
    - 所有單字第一個字元都大寫 EX:LastName
- 底線法 
    - 單字之間以底線來做區隔 EX:last_name
:::
:::warning
考量呼叫便利性，頻繁呼叫的函數名稱，會以「$」作為起始字元命名
:::

--- 
### 二、宣告此變數/常數的指令
- var
    - 宣告全域變數，全部
    - 宣告一個可隨意更改其內容的變數
```javascript!
var apple = 12;
var apple = 36;
```
>有點隨便，我想怎麼改就怎麼改，但到最後會搞混這個變數到底有沒有用過

- let
宣告一個可隨意更改其內容的**區塊區域變數**

:::info
- 名詞解釋
    - 區塊
        - 指用{ }所框起來的內容，通常在是在for或while裡面
    - 區域變數
        - 指在**function函式**內所宣告的變數,此變數只提供在此函式內使用，函式外的不能使用該變數。
        - 相反:全域變數
            - 大家皆可呼叫使用他，然後變數就變得一團亂X
            - EX:var 
:::

- const
宣告一個只可讀取的不可變==常數==
    - 易於維護
    - 明確表達數值意涵
    
--- 
## 三、差別與建議:
1. let 與 const 差別:
let   所定義的變數，能改變(可被覆寫)；

![](https://i.imgur.com/188epWe.png)

const 所定義的變數，則不能改變(不可被覆寫)。

![](https://i.imgur.com/qOgmHuW.png)

var 所定義的變數，能改變(可被覆寫)，但定義較不明確，不推薦使用；

## let const 重複宣告變數問題
let 跟 const 皆不可重複宣告，不然會產生問題
但若是分層宣告則不會產生問題

| 分層宣告   |  合在一起(形成重複宣告)  | 
| --------  | -------- | 
| ![](https://i.imgur.com/9xFwAZi.png)|![](https://i.imgur.com/ZkwriS5.png)|

產生錯誤訊息:
Uncaught SyntaxError: Identifier 'n' has already been declared 

資料來源:
https://ithelp.ithome.com.tw/articles/10233551
[初探JavaScript - JS全域變數與區域變數](https://ithelp.ithome.com.tw/articles/10234400)



