Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

ตัวแปร JavaScript ถูกจัดสรรหน่วยความจำอย่างไร?

การจัดการตัวแปรของ 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 ชี้ไปแล้ว