วิธีประกาศฟังก์ชั่น
โดยปกติจะมีสองวิธีในการประกาศฟังก์ชั่น:
foo () {}; // ฟังก์ชั่นการประกาศ var foo = function () {}; // ฟังก์ชั่นนิพจน์ความแตกต่าง
1. นิพจน์ฟังก์ชั่นสามารถดำเนินการโดยตรงกับวงเล็บหลังจากนั้น
2. การประกาศฟังก์ชั่นจะได้รับการจัดเตรียมล่วงหน้าล่วงหน้า
ก่อนการวิเคราะห์
ก่อนอื่นดูตัวอย่าง:
foo (); // ฟังก์ชั่นการประกาศ foo_later (); // foo_later ไม่ใช่ functionfunction foo () {console.log ('ฟังก์ชั่นการประกาศ'); } var foo_later = function () {console.log ('ฟังก์ชันนิพจน์'); -อย่างที่คุณเห็นการประกาศฟังก์ชั่น foo กำลังเตรียมและสามารถดำเนินการก่อนรหัสของตัวเอง; ฟังก์ชั่นนิพจน์ foo_later ไม่สามารถ เพื่อแก้ปัญหานี้เราต้องหากลไกการทำงานของตัวแยกวิเคราะห์จาวาสคริปต์ก่อน
BOOST ตัวแปร (รอก)
ตัวแยกวิเคราะห์ JavaScript จะยกตัวแปรและการประกาศฟังก์ชั่นในขอบเขตของตัวเอง กล่าวคือตัวอย่างข้างต้นเป็นที่เข้าใจจริงและแยกวิเคราะห์โดยตัวแยกวิเคราะห์ในรูปแบบต่อไปนี้:
function foo () {console.log ('การประกาศฟังก์ชั่น'); } // การประกาศฟังก์ชั่นทั้งหมดเป็นขั้นสูง var foo_later; // การแสดงออกของฟังก์ชั่น (การประกาศตัวแปร) จะล่วงหน้าตัวแปรเท่านั้นและการดำเนินการที่ได้รับมอบหมายจะไม่ขั้นสูง foo (); foo_later (); foo_later = function () {console.log ('ฟังก์ชันนิพจน์'); -สิ่งนี้ยังสามารถอธิบายได้ว่าทำไมการเรียกใช้ฟังก์ชันก่อนที่นิพจน์ฟังก์ชั่นจะส่งคืนข้อผิดพลาดเนื่องจากยังไม่ได้รับมอบหมายมันเป็นเพียงตัวแปรที่ไม่ได้กำหนดและแน่นอนไม่สามารถดำเนินการได้
ในทำนองเดียวกันเราสามารถลองเดาผลลัพธ์ของรหัสต่อไปนี้:
console.log (ประกาศ); var decraredlater = "ตอนนี้มันถูกกำหนดแล้ว!"; console.log (ประกาศ);
รหัสนี้สามารถแยกวิเคราะห์เป็นแบบฟอร์มต่อไปนี้:
var ประกาศ; console.log (ประกาศ); // undefinedDeclaredLater = "ตอนนี้มันถูกกำหนดแล้ว!"; console.log (ประกาศ log); // ตอนนี้มันถูกกำหนดแล้ว!
การประกาศตัวแปรถูกกล่าวถึงก่อน (ดังนั้นจะไม่มีการรายงานข้อผิดพลาดในตัวแปร) แต่การมอบหมายไม่ได้ขั้นสูงดังนั้นผลลัพธ์ผลลัพธ์แรกจะไม่ได้กำหนด
ควรสังเกตว่า
เนื่องจากการประกาศฟังก์ชั่นมีการเตรียมการอย่าใช้วิธีนี้เพื่อประกาศฟังก์ชั่นที่แตกต่างกัน พยายามเดาผลลัพธ์ของตัวอย่างต่อไปนี้:
if (true) {function aaa () {alert ('1'); }} else {function aaa () {alert ('2'); }} aaa ();แตกต่างจากที่เราคาดไว้รหัสจะปรากฏขึ้นด้วย "2" นี่เป็นเพราะการประกาศฟังก์ชั่นทั้งสองจะถูกเตรียมไว้ล่วงหน้าก่อนที่คำสั่ง IF จะถูกดำเนินการดังนั้นคำสั่ง IF นั้นไม่มีประโยชน์เลย เมื่อเรียก AAA () ฟังก์ชั่นต่อไปนี้จะถูกดำเนินการโดยตรง
สรุป
ผ่านคำอธิบายข้างต้นเราสามารถสรุปได้ดังนี้:
•การประกาศของตัวแปรนั้นสูงขึ้นไปสู่ด้านบนของขอบเขตและการมอบหมายยังคงอยู่ในสถานที่
•การประกาศฟังก์ชั่นทั้งหมด "ก่อน"
•เมื่อฟังก์ชั่นถูกกำหนดให้กับตัวแปรเป็นค่าเฉพาะตัวแปรเท่านั้นคือ "ขั้นสูง" และฟังก์ชั่นไม่ได้ "ขั้นสูง"
สัมผัสประสบการณ์มากขึ้นโดยการฝึกฝนตัวอย่างข้างต้น นอกจากนี้ในฐานะที่เป็นวิธีปฏิบัติที่ดีที่สุด: การประกาศตัวแปรจะต้องวางไว้ที่ด้านบนของขอบเขต/ฟังก์ชัน (JavaScript มีขอบเขตฟังก์ชันเท่านั้น!)
บทความข้างต้นเข้าใจการประกาศฟังก์ชั่นการแสดงออกของฟังก์ชั่นและการปรับปรุงตัวแปรเป็นเนื้อหาทั้งหมดที่ฉันแบ่งปันกับคุณ ฉันหวังว่าคุณจะให้ข้อมูลอ้างอิงและฉันหวังว่าคุณจะสนับสนุน wulin.com มากขึ้น