การจัดการตัวแปรของ JavaScript แตกต่างจากภาษาอื่น เช่น C, C++, Java ตัวแปรใน JS คิดเป็น ถังที่มีชื่อ (named containers) วางข้อมูลลงไป แล้วอ้างอิงได้โดยชื่อ
ก่อนใช้ตัวแปรต้องประกาศก่อน ด้วยคีย์เวิร์ด var:
<script> var rank; var points; </script>
การเก็บค่าในตัวแปรเรียกว่า variable initialization สามารถทำตอนสร้างหรือภายหลังได้:
<script> var rank = 1; var points; points = 100; </script>
Memory Model ใน JavaScript (Modern Understanding)
- Primitive values (string, number, boolean, null, undefined, symbol, bigint) — เก็บใน Stack (fixed size, คัดลอกค่า)
- Objects (object, array, function, date, regex, map, set) — เก็บใน Heap (dynamic size, ตัวแปรเก็บ reference/pointer)
// Primitive - copy by value
let a = 10;
let b = a; // b = 10 (copy value)
b = 20; // a ยังคงเป็น 10
// Object - copy by reference
let obj1 = { x: 1 };
let obj2 = obj1; // obj2 อ้างอิง object เดียวกัน
obj2.x = 2; // obj1.x กลายเป็น 2 ด้วย
Garbage Collector จะทำความสะอาด memory อัตโนมัติเมื่อไม่มี reference ชี้ไปแล้ว
การจัดการตัวแปรของ JavaScript แตกต่างจากภาษาอื่น เช่น C, C++, Java ตัวแปรใน JS คิดเป็น ถังที่มีชื่อ (named containers) วางข้อมูลลงไป แล้วอ้างอิงได้โดยชื่อ
ก่อนใช้ตัวแปรต้องประกาศก่อน ด้วยคีย์เวิร์ด var:
<script> var rank; var points; </script>
การเก็บค่าในตัวแปรเรียกว่า variable initialization สามารถทำตอนสร้างหรือภายหลังได้:
<script> var rank = 1; var points; points = 100; </script>
Memory Model ใน JavaScript (Modern Understanding)
- Primitive values (string, number, boolean, null, undefined, symbol, bigint) — เก็บใน Stack (fixed size, คัดลอกค่า)
- Objects (object, array, function, date, regex, map, set) — เก็บใน Heap (dynamic size, ตัวแปรเก็บ reference/pointer)
// Primitive - copy by value
let a = 10;
let b = a; // b = 10 (copy value)
b = 20; // a ยังคงเป็น 10
// Object - copy by reference
let obj1 = { x: 1 };
let obj2 = obj1; // obj2 อ้างอิง object เดียวกัน
obj2.x = 2; // obj1.x กลายเป็น 2 ด้วย
Garbage Collector จะทำความสะอาด memory อัตโนมัติเมื่อไม่มี reference ชี้ไปแล้ว