ก่อน} หลังจากการแบ่งบรรทัดอย่างน้อยหนึ่งรายการและส่วนท้ายของอินพุตโปรแกรมจะถูกแทรก
กล่าวคือคุณสามารถละเว้นอัฒภาคที่มีบรรทัดบล็อกของรหัสและชิ้นส่วนของโปรแกรมจะสิ้นสุดลง
กล่าวคือคุณสามารถเขียนรหัสต่อไปนี้ได้
การคัดลอกรหัสมีดังนี้:
ฟังก์ชั่นสแควร์ (x) {
var n = +x
ส่งคืน n * n
-
แต่ไม่สามารถเขียนได้เช่นรหัสต่อไปนี้ดังนั้นจะรายงานข้อผิดพลาด
การคัดลอกรหัสมีดังนี้:
พื้นที่ฟังก์ชัน (r) {r = +r return math.pi*r*r} // ข้อผิดพลาด
แทรกเฉพาะในกรณีที่เครื่องหมายอินพุตที่ตามมาไม่สามารถแยกวิเคราะห์ได้
กล่าวอีกนัยหนึ่งการแทรกเครื่องหมายอัฒภาคเป็นกลไกการแก้ไขข้อผิดพลาด อ่านรหัสและพูด
การคัดลอกรหัสมีดังนี้:
A = B
(f ())
// สามารถแยกวิเคราะห์ลงในคำสั่งแยกต่างหากด้วยราคาต่อหน่วยของคำสั่งต่อไปนี้
a = b (f ())
A = B
f ()
// แยกวิเคราะห์เป็นสองข้อความอิสระ
a = bf (); // การแยกวิเคราะห์ไม่ถูกต้อง
ดังนั้นคุณต้องให้ความสนใจกับจุดเริ่มต้นของคำแถลงถัดไปเพื่อพิจารณาว่าคุณสามารถละเว้นเครื่องหมายอัฒภาคอย่างถูกกฎหมายได้หรือไม่
(, [, +, -, และ /จากนั้นก็เป็นการดีที่สุดที่จะไม่ละเว้นเครื่องหมายอัฒภาคที่อยู่ด้านหน้า
ยกตัวอย่างเพื่ออธิบาย
การคัดลอกรหัสมีดังนี้:
A = B
['r', 'g', 'b']. foreach (ฟังก์ชั่น (คีย์) {
console.log (กุญแจ);
-
ตอนแรกคุณคิดว่าไม่มีข้อผิดพลาด แต่ตัวแยกวิเคราะห์วิเคราะห์ลงในข้อความต่อไปนี้
การคัดลอกรหัสมีดังนี้:
a = b ['r', 'g', 'b']. foreach (ฟังก์ชั่น (คีย์) {
console.log (กุญแจ);
-
เนื่องจากประโยคที่สองเริ่มต้นด้วย [ตัวแยกวิเคราะห์จะไม่แทรกเครื่องหมายอัฒภาคโดยอัตโนมัติหลังจากคำสั่งแรกดังนั้นจึงแยกวิเคราะห์ตามที่แสดงด้านบน B ['B'] ไม่ผิดพลาดเมื่อแยกวิเคราะห์สมการข้างต้นหรือไม่?
ดังนั้นหากข้อความเริ่มต้นด้วยอักขระห้าตัว (, [, +, -และ / / ดีที่สุดที่จะไม่ละเว้นเครื่องหมายอัฒภาคก่อน
หากคุณต้องการที่จะละเว้น semicolon โปรแกรมเมอร์ที่มีประสบการณ์จะทำตามคำสั่งเพื่อให้แน่ใจว่าการแยกวิเคราะห์วิเคราะห์อย่างถูกต้อง ดังที่แสดงด้านล่าง
การคัดลอกรหัสมีดังนี้:
A = B
var x // คำสั่งประกาศจะถูกเพิ่มเป็นพิเศษที่นี่เพื่อให้แน่ใจว่า a = b จะไม่ถูกแยกวิเคราะห์ด้วย (f ())
(f ())
ดังนั้นหากคุณต้องการละเว้นเครื่องหมายอัฒภาคคุณต้องตรวจสอบว่าเครื่องหมายเริ่มต้นของบรรทัดถัดไปคืออักขระห้าข้างต้นหรือไม่ทำให้ตัวแยกวิเคราะห์ปิดการใช้งานการแทรกเซมิโคลอนโดยอัตโนมัติหรือคุณสามารถนำหน้าอักขระห้าตัว (, [, +, -และ / /
การละเว้นอัฒภาคทำให้เกิดปัญหาการเชื่อมต่อสคริปต์
การคัดลอกรหัสมีดังนี้:
//file1.js
(การทำงาน () {
-
-
//file2.js
(การทำงาน () {
-
-
เมื่อเชื่อมต่อไฟล์สองไฟล์ข้างต้นพวกเขาจะถูกแยกวิเคราะห์ดังนี้
การคัดลอกรหัสมีดังนี้:
(การทำงาน () {
-
})()(การทำงาน () {
-
-
ดังนั้นการละเว้นเครื่องหมายอัฒภาคไม่เพียง แต่คุณจะต้องระวังไม่เพียง แต่เกี่ยวกับแท็กถัดไปของไฟล์ปัจจุบัน แต่ยังเกี่ยวกับแท็กใด ๆ ที่อาจปรากฏหลังจากคำสั่งหลังจากเชื่อมต่อสคริปต์
เพื่อหลีกเลี่ยงข้อผิดพลาดในการแยกวิเคราะห์ตัวแยกวิเคราะห์คุณสามารถนำหน้าอัฒภาคพิเศษในแต่ละไฟล์เพื่อป้องกันสคริปต์จากการเชื่อมต่อที่ประมาท หากคำสั่งเริ่มต้นของไฟล์ถูกสลับด้วยอักขระที่เปราะบาง 5 ข้างต้นคุณควรเพิ่มคำนำหน้าเซมิโคลอนเพิ่มเติม
การสร้างข้อ จำกัด ด้านไวยากรณ์ JavaScript
JavaScript การผลิตไวยากรณ์การผลิต: ไม่อนุญาตให้แบ่งบรรทัดระหว่างอักขระสองตัว
ยกตัวอย่าง:
การคัดลอกรหัสมีดังนี้:
กลับ
-
รหัสข้างต้นถูกแยกวิเคราะห์เข้าไปใน
การคัดลอกรหัสมีดังนี้:
กลับ;
-
-
กฎการแทรกเครื่องหมายอัฒภาคสำหรับการเพิ่มขึ้นของตนเองและการลดการดำเนินการด้วยตนเอง
การคัดลอกรหัสมีดังนี้:
อัน
-
ข
คิดว่ารหัสข้างต้นจะแยกวิเคราะห์อะไร? มาบอกคำตอบกันเพราะตัวดำเนินการ Autoincrement สามารถใช้เป็นทั้งตัวดำเนินการที่ตั้งไว้ล่วงหน้าและตัวดำเนินการ postset แต่ตัวดำเนินการ postset ไม่สามารถปรากฏขึ้นก่อนที่จะหยุดพักบรรทัดดังนั้นรหัสด้านบนจะถูกแยกวิเคราะห์
การคัดลอกรหัสมีดังนี้:
a;
++ b;
เครื่องหมายอัฒภาคจะไม่ถูกแทรกโดยอัตโนมัติเป็นตัวคั่นที่หัวของคำสั่งสำหรับลูปที่ว่างเปล่า
การคัดลอกรหัสมีดังนี้:
สำหรับ (var i = 0, ทั้งหมด = 1
ฉัน <ความยาว
i ++) {
ทั้งหมด*= i;
-
รหัสเช่นข้างต้นจะมีข้อผิดพลาดในการแยกวิเคราะห์
ในขณะที่ร่างกายลูปที่ว่างเปล่าจะต้องแสดงเครื่องหมายอัฒภาคไม่เช่นนั้นจะนำไปสู่ข้อผิดพลาดในการแยกวิเคราะห์
การคัดลอกรหัสมีดังนี้:
ฟังก์ชั่น mytest () {
ในขณะที่ (จริง)
-
ต้องเขียนดังนี้เพื่อหลีกเลี่ยงข้อผิดพลาด
การคัดลอกรหัสมีดังนี้:
ฟังก์ชั่น mytest () {
ในขณะที่ (จริง);
-
มาสรุปกันเถอะ
1. ลดอัพคอลลอนก่อนที่แท็ก} ในตอนท้ายของบรรทัดและในตอนท้ายของโปรแกรม
2. ลดอัพคอลลอนเมื่อเครื่องหมายต่อไปนี้ไม่สามารถแยกวิเคราะห์ได้
3. คุณต้องไม่ละเว้นเครื่องหมายอัฒภาคก่อนที่จะเริ่มต้นด้วย (, [, [, +, -และ / อักขระ
4. เมื่อสคริปต์เชื่อมต่อกันให้ใส่เครื่องหมายขีดตัวไปที่สคริปต์อย่างชัดเจนระหว่างสคริปต์
5. คุณต้องไม่ห่อบรรทัดก่อนที่พารามิเตอร์ของการส่งคืนโยนโยนทำลายดำเนินการต่อไป ++ หรือ -
6. เครื่องหมายอัฒภาคไม่สามารถอนุมานได้ว่าเป็นตัวคั่นสำหรับส่วนหัวของ A สำหรับลูปหรือคำสั่งที่ว่างเปล่า