สมมติว่านี่คือข้อมูลโค้ดตัวอย่าง และเราจำเป็นต้องบอกผลลัพธ์ที่เป็นไปได้สำหรับข้อมูลโค้ดนี้และให้คำอธิบายสำหรับข้อมูลนี้
var name = 'Zakir'; (() => { name = 'Rahul'; return; console.log(name); function name(){ let lastName = 'Singh'; } })(); console.log(name);
มาแก้ปัญหานี้ทีละบรรทัดด้วยวิธีการที่ไร้เดียงสา
1 → 'Zakir' เก็บไว้ในชื่อตัวแปร
3 → เราเข้าสู่ฟังก์ชันที่ไม่ระบุตัวตนที่ดำเนินการเอง
4 → ชื่อตัวแปรเริ่มต้นใหม่เป็น 'ราหุล'
5 → พบคำสั่ง return ดังนั้นเราจึงออกจากฟังก์ชัน
15 → พิมพ์ชื่อตัวแปรไปยังหน้าจอที่มีค่าปัจจุบันคือ ‘ราหุล’
ดังนั้นผลลัพธ์สุดท้ายจะเป็น
Rahul
แต่น่าเสียดายที่มันไม่ถูกต้อง เรามาทบทวนโค้ดกันอีกครั้งเพื่อดูว่าเราผิดพลาดตรงไหน คราวนี้คงแนวคิดของตัวแปรและฟังก์ชั่นการยกขึ้นไว้ในใจ
1 → 'Zakir' เก็บไว้ในชื่อตัวแปร
3 → เราเข้าสู่ฟังก์ชันที่ไม่ระบุตัวตนที่ดำเนินการเอง
เมื่อเราเข้าสู่ฟังก์ชัน การยกฟังก์ชันจะเริ่มต้นขึ้น และชื่อฟังก์ชัน () ซึ่งกำหนดไว้ที่ด้านล่างของฟังก์ชันการดำเนินการด้วยตนเองถูกยกขึ้นด้านบนสุดของฟังก์ชันการดำเนินการด้วยตนเอง และในสถานะขั้นกลางนั้น โค้ดจะมีลักษณะดังนี้ −
ตัวอย่าง
let name = 'Zakir'; (() => { let name; name = 'Rahul'; return; console.log(name); name = function(){ let lastName = 'Singh'; } })(); console.log(name);
โปรดทราบว่าเมื่อใดก็ตามที่ตัวแปร/ฟังก์ชันถูกยกขึ้นไปที่ด้านบนสุดของขอบเขต จะมีการกำหนดและเริ่มต้นเท่านั้น ตัวแปร/ฟังก์ชันจะเริ่มต้นที่ตำแหน่งจริง ที่ด้านบนจะไม่มีการกำหนด แต่มีอยู่
ดังนั้น เมื่อชื่อตัวแปรถูกเริ่มต้นใหม่ จะเป็นชื่อตัวแปรในเครื่องที่จะเริ่มต้นใหม่และไม่ใช่ตัวแปรส่วนกลาง ดังนั้นหลังจากนี้ เราจะออกจากฟังก์ชันดำเนินการเองและพิมพ์ชื่อตัวแปรทั่วโลกไปยังคอนโซล ซึ่งยังคงเก็บ "Zakir" ไว้ ดังนั้นผลลัพธ์จะเป็น −
ผลลัพธ์
Zakir