T.D.Z ซึ่งย่อมาจาก Temporal Dead Zone ซึ่งมีความหมายที่ชัดเจนในตัวเอง Temporal Dead Zone ฟังดูเหมือนเป็นวลีไซไฟ แต่เราควรเจอคำวิเศษทั้งสามคำนี้เพื่อทำความเข้าใจว่าคำศัพท์และแนวคิดที่เราทำงานด้วยทุกวันคืออะไร ดังนั้นก่อนที่จะก้าวไปข้างหน้า เรามาเจาะลึกสามคำนี้ซึ่งได้แก่ Temporal, Dead และ Zone

ชั่วขณะซึ่งบ่งบอกถึงบางสิ่งเช่นชั่วคราว คำว่าตาย ซึ่งหมายถึงสภาวะที่ไร้ชีวิตชีวา และโซนหมายถึงพื้นที่ซึ่งหมายถึงในการเขียนโปรแกรมโลกที่เกี่ยวข้องกับความทรงจำหรือถือเป็นช่วงเวลาหรือระยะ ดังนั้นการรวมคำศัพท์ทั้งสามนี้เข้าด้วยกันจะบรรยายได้ว่าเอนทิตีบางอย่างอยู่ในสถานะไร้ชีวิตหรือไม่ใช้งานชั่วคราว และไม่สามารถใช้สำหรับงานประเภทใด ๆ ได้ เพื่อทำความเข้าใจหัวข้อนี้ เราต้องมีความรู้เกี่ยวกับคีย์เวิร์ด let และ const ใน JavaScript จึงจะเข้าใจได้อย่างชาญฉลาด เราจะต้องพิจารณาให้และ const และขอบเขตในส่วนนี้โดยเฉพาะเล็กน้อย!
การประกาศทั้งแบบ Const และ Let มีการกำหนดขอบเขตของบล็อก หมายความว่าสามารถเข้าถึงได้ภายในสภาพแวดล้อม { } เท่านั้น var ไม่มีข้อจำกัดดังกล่าว ดังนั้นจึงถูกกำหนดไว้ในขอบเขตของฟังก์ชัน
‹script›
ให้อายุ = 5;
ให้วันเกิด= true;
ถ้า(วันเกิด){
ให้อายุ = 6;< br />
console.log(อายุ); // 5
‹/script›
เอาต์พุตของมันคือ 5 เนื่องจากการประกาศอายุซ้ำถึง 6 นั้นใช้ได้เฉพาะในเครื่องหมายปีกกาเท่านั้น ดังนั้นคีย์เวิร์ด “let” จึงมีขอบเขตบล็อก
ในทำนองเดียวกัน :
‹script›
var age = 5;
var birthday= true;
if(birthday){
อายุ = 6;

console.log(อายุ); // 6
‹/script›
ตอนนี้เอาต์พุตของมันคือ 6 นี่เป็นเพราะว่าคีย์เวิร์ด “var” มีขอบเขตทั่วโลกและเข้าถึงการเริ่มต้นใหม่ของตัวแปรด้วย มูลค่าที่แตกต่างกัน

การประกาศและการเริ่มต้น

การประกาศตัวแปรระบุว่าเรากำลังจัดสรรหน่วยความจำให้กับตัวแปรนั้น ในขณะที่การกำหนดค่าเริ่มต้นระบุว่าเรากำลังกำหนดค่าบางอย่างให้กับตัวแปร

เมื่อมาถึง TDZ อีกครั้ง คุณอาจกำลังคิดว่าเหตุใดจึงต้องเข้าถึงตัวแปรใดๆ ก่อนที่จะเริ่มต้น ?? มันเป็นเรื่องจริงและเป็นแนวทางปฏิบัติที่ผิด แต่มีเหตุผลเฉพาะเจาะจงในการอนุญาตให้นักพัฒนาเขียนโค้ดที่ดีและทำให้การดีบักเป็นเรื่องง่ายในเรื่องของคีย์เวิร์ด let และ const

มาทำความเข้าใจ TDZ กันดีกว่า :
‹script›
console.log(x);
// undefed
var x= 6;
console.log(x);
//6
‹/script›
ที่นี่มีการสร้างบริบทการดำเนินการทั่วโลกและหน่วยความจำถูกจัดสรรให้กับ x; หมายถึง x มีตำแหน่งในหน่วยความจำและกลไก JS ทำให้ไม่ได้กำหนด ตอนนี้ระยะการดำเนินการของเธรดเริ่มต้นในระหว่างคำสั่ง console.log นี้ดำเนินการและพิมพ์ที่เก็บค่าใน x ซึ่งไม่ได้กำหนดไว้
ตอนนี้ในบรรทัดถัดไป มี x ถูกกำหนดให้กับ 6 และค่า x ที่ไม่ได้กำหนดจะถูกแทนที่ด้วย 6
ตอนนี้ใช้โค้ดบางส่วนเกี่ยวกับ ให้ และ const :
‹script›
console.log(x);
console.log(z);
var x=6;
ให้ z = 4;
console.log(x);
console.log(z);
‹/script›
//
ไม่ได้กำหนด
// ReferenceError : ไม่สามารถเข้าถึง z ก่อนการกำหนดค่าเริ่มต้น
ก่อนอื่นบริบทการดำเนินการทั่วโลกจะถูกสร้างขึ้นอีกครั้ง และขั้นตอนการจัดสรรหน่วยความจำจะเริ่มต้นขึ้น ในระหว่างนี้ตัวแปร x ทำให้ไม่ได้กำหนดไว้ที่นั่น ในไม่ช้า z จะมีช่องว่างในตำแหน่งหน่วยความจำที่แตกต่างกัน และค่าที่เหมือนกันกับ x จะถูกกำหนดให้เป็นค่า ตอนนี้ระยะการประมวลผลเธรดเริ่มต้นขึ้น ในระหว่างที่คำสั่ง console.log(x) ดำเนินการและพิมพ์ค่าของ x ซึ่งไม่ได้กำหนดไว้
มาถึงขั้นตอนถัดไป บรรทัด มี console.log(z) javaScript จะส่ง ข้อผิดพลาดในการอ้างอิง ในกรณีนี้ และโปรแกรมจะหยุดทำงาน (ทำให้เกิด tdz)

“ดังนั้นเราสามารถพูดได้ว่า TDz คือเวลาตั้งแต่เมื่อตัวแปร Let นี้ถูกยกขึ้นและจนกระทั่งมันถูกกำหนดค่าเริ่มต้นบางค่า เวลาระหว่างตัวแปรเหล่านั้นเรียกว่า Temporal Dead Zone”

ขอบคุณ !