# Variables

## Variable คืออะไร ?

คือ ตัวแปรที่สามารถเก็บค่าไว้เพื่อใช้ในภายหลังได้ โดยตัวแปรใน JavaScript สามารถเก็บค่าได้ทุกประเภท

## การตั้งชื่อตัวแปร

ชื่อตัวแปรเป็นแบบ case-sensitive และ**ต้องขึ้นต้นด้วย a-z, A-Z, \_ หรือ $ เท่านั้น** ตัวที่เหลือสามารถใส่เป็น 0-9 ได้&#x20;

{% hint style="danger" %}
ห้ามตั้งชื่อตัวแปรเป็น keyword ของ JavaScript
{% endhint %}

```javascript
let _type;
let $type;
let num0;
let 0piece; // SyntaxError: Invalid or unexpected token
let typeof; // SyntaxError: Unexpected token 'typeof'
```

## การประกาศตัวแปร

นิยมใช้อยู่ 2 วิธี โดยจะมี scope อยู่ใน block ที่มันถูกประกาศเท่านั้น คือ

{% hint style="info" %}
block คือ statement ที่คลุม statement อื่น ๆ ด้วย { }
{% endhint %}

1. `let` จะประกาศตัวแปรที่**เปลี่ยนแปลงค่าได้**

   ```javascript
   let x  = 10;
    
   {
     let x = 5;
     console.log(x); // 5
   }
    
   console.log(x); // 10
   x = 100;
   console.log(x); // 100
   ```
2. `const` จะประกาศตัวแปรที่เก็บค่าคงที่ที่**เปลี่ยนแแปลงค่าไม่ได้**

   ```javascript
   const y  = 10;
    
   {
     const y = 5;
     console.log(y); // 5
   }
    
   console.log(y); // 10
   y = 100; // TypeError: Assignment to constant variable
   console.log(y);
   ```

## แหล่งอ้างอิง 📑

{% embed url="<https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Grammar_and_types#variables>" %}

{% embed url="<https://developer.mozilla.org/en-US/docs/MDN/Guidelines/Code_guidelines/JavaScript#declaring_variables>" %}

{% embed url="<https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let>" %}

{% embed url="<https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/const>" %}
