การอธิบายล่วงหน้าด้วยคำหลัก VAR
ก่อนอื่นให้ดูผลลัพธ์ของการดำเนินการรหัสนี้:
การคัดลอกรหัสมีดังนี้:
การแจ้งเตือน (n); // ป๊อปอัพที่ไม่ได้กำหนด
var n = 10;
ผลของการป๊อปอัพไม่ได้กำหนดทำไมไม่ 10? มาดูผลการดำเนินการรหัสต่อไปนี้:
การคัดลอกรหัสมีดังนี้:
การแจ้งเตือน (n);
n = 10;
รายงานการดำเนินการมีดังนี้:
เหตุใดข้อผิดพลาดจึงรายงานในครั้งนี้คือเมื่อรหัสกำลังทำงานตัวแปร n ไม่ได้ประกาศ จากการเปรียบเทียบรหัสทั้งสองชิ้นนี้เราพบว่ามีความแตกต่างระหว่างตัวแปรที่มีคำหลัก VAR และตัวแปรโดยไม่มีคำหลัก VAR ก่อนที่รหัสจะถูกเรียกใช้งานเบราว์เซอร์ดูเหมือนจะให้ค่าเริ่มต้นที่ไม่ได้กำหนด ดังนั้นก่อนที่รหัสจะถูกเรียกใช้งานกระบวนการของเอ็นจินเบราว์เซอร์สแกนตัวแปรโดยอัตโนมัติด้วยคำหลัก VAR และคำหลักฟังก์ชันและฟังก์ชั่นและฟังก์ชั่นที่กำหนดไว้ก่อนที่รหัสจะถูกเรียกใช้เรียกว่าการตีความล่วงหน้า
การอธิบายล่วงหน้าด้วยคำหลักของฟังก์ชั่น
มาดูผลลัพธ์การดำเนินการรหัสต่อไปนี้:
การคัดลอกรหัสมีดังนี้:
fn (); // popt สวัสดี
ฟังก์ชั่น fn () {
การแจ้งเตือน ('สวัสดี');
-
ผลการดำเนินการปรากฏขึ้นสวัสดีและ FN สามารถดำเนินการได้ตามปกติ เหตุผลก็คือ FN ถูกอธิบายล่วงหน้าก่อนที่จะดำเนินการรหัส FN ได้รับการกำหนด (กำหนด) ในระหว่างการอธิบายล่วงหน้า เรามีคำถามอีกครั้งว่าทำไมผลการดำเนินการรหัสแรกจึงไม่ปรากฏขึ้น 10 แต่ไม่ได้กำหนดและมีการแนะนำแนวคิดอื่นอีกครั้ง
ประกาศและคำจำกัดความใน JavaScript
เรามักจะใช้คีย์ VAR เพื่อประกาศตัวแปรและใช้คำหลักฟังก์ชันเพื่อกำหนดฟังก์ชั่น อย่างไรก็ตามคำหลักของฟังก์ชั่นประกาศและกำหนดฟังก์ชั่นในเวลาเดียวกันในขณะที่ VAR สามารถประกาศตัวแปรเท่านั้นและไม่มีฟังก์ชั่นของนิยาม
ต่อไปนี้เป็นตัวแปรที่ประกาศด้วยคำหลัก VAR:
การคัดลอกรหัสมีดังนี้:
var n; // ประกาศตัวแปร n
var m = 10; // ประกาศตัวแปร m และกำหนด 10 ให้กับมัน
ต่อไปนี้เป็นฟังก์ชั่นที่กำหนดด้วยคำหลักของฟังก์ชั่น:
การคัดลอกรหัสมีดังนี้:
// กำหนดฟังก์ชั่น fn
ฟังก์ชั่น fn () {
การแจ้งเตือน ('สวัสดี');
-
ความแตกต่างระหว่างการอธิบายล่วงหน้าของคำหลัก var และคำหลักของฟังก์ชั่น
ในความเป็นจริงความแตกต่างระหว่างทั้งสองคือเมื่ออธิบายล่วงหน้าด้วยคำหลัก VAR ส่วนคำประกาศเท่านั้นที่อธิบายไว้ล่วงหน้า (เนื่องจากไม่มีความสามารถในการกำหนดตัวเอง) ในขณะที่เมื่ออธิบายไว้ล่วงหน้าด้วยคำหลักฟังก์ชันการประกาศและคำจำกัดความจะถูกอธิบายไว้ล่วงหน้าในเวลาเดียวกัน จากนั้นเราจะวิเคราะห์รหัสแรกอีกครั้งและวิเคราะห์ดังนี้:
การอธิบายล่วงหน้าของ unconventionality (Scam)
ทำไมจึงมีการกล่าวกันว่าไม่เป็นทางการ? โปรดดูรหัสต่อไปนี้ (ยกเว้น Firefox):
การคัดลอกรหัสมีดังนี้:
การแจ้งเตือน (n);
fn ();
ถ้า (เท็จ) {
var n = 10;
ฟังก์ชั่น fn () {
การแจ้งเตือน ('สวัสดี');
-
-
ที่ไม่ได้กำหนดจะปรากฏขึ้นในบรรทัดแรกของการดำเนินการรหัสและสวัสดีจะปรากฏขึ้นในบรรทัดที่สองของการดำเนินการรหัส; เพราะ N และ FN ถูกอธิบายไว้ล่วงหน้าก่อนการดำเนินการรหัส แม้ว่าเงื่อนไขจะถูกตัดสินว่าเป็นเท็จ แต่เอ็นจิ้นเบราว์เซอร์ถาวรจะสแกนตัวแปร n ที่ประกาศด้วยคำหลัก VAR และ FN ด้วยคำจำกัดความคีย์ฟังก์ชันเป็น
*การตีความล่วงหน้าไม่สนใจการซ้ำซ้อนไม่ใช่การนิยามใหม่
เนื่องจากสถานที่นี้ค่อนข้างพันกันและไม่เข้าใจง่ายจึงได้เพิ่มเครื่องหมายดอกจันโปรดดูรหัสต่อไปนี้:
การคัดลอกรหัสมีดังนี้:
การแจ้งเตือน (n);
var n = 10;
var n = 9;
var n;
การแจ้งเตือน (n);
ผลการดำเนินการของรหัสนี้คืออะไร? มาวิเคราะห์กันเถอะ:
ดำเนินการต่อเพื่ออัปโหลดรหัสโปรดวิเคราะห์ผลการดำเนินการต่อไปนี้:
การคัดลอกรหัสมีดังนี้:
fn ();
ฟังก์ชั่น fn () {
การแจ้งเตือน ('1');
-
fn ();
ฟังก์ชั่น fn () {
การแจ้งเตือน ('2');
-
fn ();
แผนภาพการวิเคราะห์รหัสมีดังนี้:
ฟังก์ชั่นการวิเคราะห์การอธิบายล่วงหน้าด้วยนิยามฟังก์ชั่น
สรุป:
โพสต์บล็อกนี้ใช้รหัสและภาพหน้าจอขนาดใหญ่เพื่อภาพรวมการตีความล่วงหน้าใน JavaScript เมื่อมองดูหนังสือหลายเล่มมีคำอธิบายน้อยมากเกี่ยวกับการตีความก่อน ในความเป็นจริงมีสถานการณ์ไม่มากนักที่ใช้ในการทำงาน น่าเสียดายที่การตีความล่วงหน้าเป็นสิ่งที่ต้องทำในคำถามสัมภาษณ์สำหรับ บริษัท ยักษ์ใหญ่ เมื่อฉันติดต่อกับมันครั้งแรกฉันรู้สึกว่ามันไม่ได้เขียนโค้ดตามสามัญสำนึก แต่บางครั้งมันอาจทำงานได้ตามปกติและจะไม่รายงานข้อผิดพลาด แน่นอนว่าสิ่งนี้ยังเพิ่มการสำรวจความลึกลับของเราและยังช่วยให้เราเข้าใจเพิ่มเติมว่าเอ็นจิ้นเบราว์เซอร์อธิบายและดำเนินการรหัสของเราได้อย่างไร ฉันจะใช้กรณีคลาสสิกสองสามรายการเพื่อวิเคราะห์ในโพสต์บล็อกที่ตามมา ขอบคุณอีกครั้งสำหรับการสนับสนุนของคุณ!