สำรวจความลึกของการยก: ทดสอบทักษะ JavaScript ของคุณ
ฉันเพิ่งพบคำถามที่น่าสนใจซึ่งทดสอบความรู้ของคุณเกี่ยวกับการยก เพื่อไม่ให้รออีกต่อไป เรามาดูคำถามกันดีกว่า
.
.
.
.
.
.
Output : จะบันทึกฟังก์ชัน
มาเจาะลึก 🏊 ในตรรกะเบื้องหลัง console.log นี้:
ใน JavaScript ทั้งการประกาศฟังก์ชันและการประกาศตัวแปรจะถูกยกไปไว้ที่ด้านบนสุดของขอบเขตที่มีอยู่ในระหว่างขั้นตอนการคอมไพล์
อย่างไรก็ตาม มีวิธีปฏิบัติที่แตกต่างกัน:
- การประกาศฟังก์ชัน: เมื่อมีการประกาศฟังก์ชันโดยใช้คีย์เวิร์ดฟังก์ชัน (
function functionName() {}
) ส่วนเนื้อหาของฟังก์ชันทั้งหมดจะถูกยกขึ้น และฟังก์ชันจะพร้อมใช้งานทุกที่ภายในขอบเขต แม้แต่ ก่อนการประกาศ สิ่งนี้เรียกว่า 'การยกฟังก์ชัน' - การประกาศตัวแปร: เมื่อมีการประกาศตัวแปรโดยใช้คำหลัก
var
(var variableName;
) จะยกเฉพาะชื่อตัวแปรเท่านั้น และตัวแปรจะเริ่มต้นด้วยค่าundefined
ไม่ใช่ว่า JavaScript จงใจเลือกที่จะส่งคืนฟังก์ชันบนตัวแปรที่มีชื่อเดียวกัน
แต่เป็นผลมาจากวิธีการทำงานของการยกและขอบเขตในภาษา ในการประกาศฟังก์ชัน JS จะมีความสำคัญเหนือกว่าการประกาศตัวแปรเนื่องจากการยก
การประกาศตัวแปรไม่มีผลกระทบใดๆ ต่อการประกาศฟังก์ชัน จะเห็นตัวอย่างด้านล่าง
มาแบ่งโค้ดทีละบรรทัด:
นี่คือสิ่งที่เกิดขึ้น:
- การประกาศฟังก์ชัน
function myJSSkills() {}
ถูกยกขึ้นไปที่ด้านบนของขอบเขตฟังก์ชันjsIsAwesome
ซึ่งหมายความว่าตัวแปรmyJSSkills
อ้างถึงฟังก์ชันแล้ว - การประกาศตัวแปร
var myJSSkills = -99;
จะถูกยกไปไว้ที่ด้านบนสุดของขอบเขตฟังก์ชันmyJSSkills
ด้วย แต่จะมีเพียงการประกาศตัวแปรเท่านั้นที่จะย้ายไปที่ด้านบน เช่นvar myJSSkills;
3. เมื่อพบคำสั่ง return
จะส่งกลับฟังก์ชัน myJSSKills
เพราะนั่นคือสิ่งที่ myJSSkills
อ้างถึง ณ จุดนี้ในการเรียกใช้โค้ด จนถึงจุดนี้ myJSSkills = -99;
จะไม่ถูกดำเนินการ
รูปแบบอื่นๆ ที่ควรลอง:
function jsIsAwesome() { var myJSSkills = -99; function myJSSkills() {} return myJSSkills; } console.log(jsIsAwesome());
.
.
.
เอาท์พุต: -99 ( ปรบมือให้ถ้าคุณทำถูก 👏 )
function myJSSkills() {}; var myJSSkills; // The variable declaration does not have any impact on the function declaration console.log(myJSSkills);
.
.
.
เอาท์พุต: function myJSSkills() {};
( ปรบมือให้ถ้าคุณทำถูก 👏 )
ในภาษาอังกฤษธรรมดา
ขอขอบคุณสำหรับการเป็นส่วนหนึ่งของชุมชนของเรา! ก่อนที่คุณจะไป:
- อย่าลืม ปรบมือ และ ติดตาม นักเขียน! 👏
- คุณสามารถค้นหาเนื้อหาเพิ่มเติมได้ที่ PlainEnglish.io 🚀
- ลงทะเบียนเพื่อรับ จดหมายข่าวรายสัปดาห์ฟรี ของเรา 🗞️
- ติดตามเราบน Twitter, LinkedIn, YouTube และ ขัดแย้ง.