สำรวจความลึกของการยก: ทดสอบทักษะ JavaScript ของคุณ

ฉันเพิ่งพบคำถามที่น่าสนใจซึ่งทดสอบความรู้ของคุณเกี่ยวกับการยก เพื่อไม่ให้รออีกต่อไป เรามาดูคำถามกันดีกว่า

.

.

.

.

.

.

Output : จะบันทึกฟังก์ชัน

มาเจาะลึก 🏊 ในตรรกะเบื้องหลัง console.log นี้:

ใน JavaScript ทั้งการประกาศฟังก์ชันและการประกาศตัวแปรจะถูกยกไปไว้ที่ด้านบนสุดของขอบเขตที่มีอยู่ในระหว่างขั้นตอนการคอมไพล์

อย่างไรก็ตาม มีวิธีปฏิบัติที่แตกต่างกัน:

  1. การประกาศฟังก์ชัน: เมื่อมีการประกาศฟังก์ชันโดยใช้คีย์เวิร์ดฟังก์ชัน (function functionName() {}) ส่วนเนื้อหาของฟังก์ชันทั้งหมดจะถูกยกขึ้น และฟังก์ชันจะพร้อมใช้งานทุกที่ภายในขอบเขต แม้แต่ ก่อนการประกาศ สิ่งนี้เรียกว่า 'การยกฟังก์ชัน'
  2. การประกาศตัวแปร: เมื่อมีการประกาศตัวแปรโดยใช้คำหลัก var (var variableName;) จะยกเฉพาะชื่อตัวแปรเท่านั้น และตัวแปรจะเริ่มต้นด้วยค่า undefined

ไม่ใช่ว่า JavaScript จงใจเลือกที่จะส่งคืนฟังก์ชันบนตัวแปรที่มีชื่อเดียวกัน

แต่เป็นผลมาจากวิธีการทำงานของการยกและขอบเขตในภาษา ในการประกาศฟังก์ชัน JS จะมีความสำคัญเหนือกว่าการประกาศตัวแปรเนื่องจากการยก
การประกาศตัวแปรไม่มีผลกระทบใดๆ ต่อการประกาศฟังก์ชัน จะเห็นตัวอย่างด้านล่าง

มาแบ่งโค้ดทีละบรรทัด:

นี่คือสิ่งที่เกิดขึ้น:

  1. การประกาศฟังก์ชัน function myJSSkills() {} ถูกยกขึ้นไปที่ด้านบนของขอบเขตฟังก์ชัน jsIsAwesome ซึ่งหมายความว่าตัวแปร myJSSkills อ้างถึงฟังก์ชันแล้ว
  2. การประกาศตัวแปร 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() {};( ปรบมือให้ถ้าคุณทำถูก 👏 )

ในภาษาอังกฤษธรรมดา

ขอขอบคุณสำหรับการเป็นส่วนหนึ่งของชุมชนของเรา! ก่อนที่คุณจะไป: