1. ตัวแปรท้องถิ่นจะถูกใช้ก่อนแล้วจึงประกาศ ซึ่งจะไม่ส่งผลกระทบต่อตัวแปรภายนอกที่มีชื่อเดียวกัน
คัดลอกรหัสรหัสดังต่อไปนี้:
var x = 1; // --> ตัวแปรภายนอก x
ฟังก์ชั่น fn(){
alert(x); // --> ตัวแปรโลคอลที่ไม่ได้กำหนด x ถูกใช้ก่อน
var x = 2; // ประกาศและกำหนดในภายหลัง
-
เอฟเอ็น();
การแจ้งเตือน(x); // --> 1<BR>
จุดแรกคือประโยคแรกในฟังก์ชัน fn ส่งออก x และ x ถูกกำหนดไว้ในประโยคที่สอง สิ่งนี้ได้รับอนุญาตใน JS และอนุญาตในที่นี้หมายความว่าโปรแกรมสามารถทำงานได้โดยไม่มีข้อผิดพลาดทางไวยากรณ์
แต่ไม่อนุญาตให้ใช้ในภาษาอื่นเช่น C และ Java จะต้องประกาศตัวแปรก่อนใช้งาน เช่น
คัดลอกรหัสรหัสดังต่อไปนี้:
การทดสอบชั้นเรียนสาธารณะ {
โมฆะคงที่สาธารณะ main (String [] args) {
System.out.println(x); //ใช้ก่อน
int x = 10; // โพสต์ประกาศ
-
-
ใน Java คอมไพเลอร์จะแจ้งข้อผิดพลาดและโปรแกรมไม่สามารถทำงานได้
จุดที่สองคือตัวแปรเฉพาะที่ x ภายในฟังก์ชัน fn จะไม่ส่งผลกระทบต่อตัวแปรภายนอก x นั่นคือเอาต์พุตการแจ้งเตือนใน fn ไม่ใช่ 1 แต่ไม่ได้กำหนดไว้
ประการที่สอง พารามิเตอร์ที่เป็นทางการมีลำดับความสำคัญสูงกว่าชื่อฟังก์ชัน
คัดลอกรหัสรหัสดังต่อไปนี้:
ฟังก์ชั่น fn (fn) {
การแจ้งเตือน (fn);
-
fn('สวัสดี'); // --> "สวัสดี"
คุณจะเห็นว่าชื่อฟังก์ชันและพารามิเตอร์ที่เป็นทางการมีชื่อเดียวกันกับ fn และเอาต์พุตคือสตริง "hello" แต่ไม่ใช่เนื้อความของฟังก์ชัน (fn.toString()) ของฟังก์ชัน fn
ประการที่สาม พารามิเตอร์ที่เป็นทางการมีลำดับความสำคัญสูงกว่าอาร์กิวเมนต์
คัดลอกรหัสรหัสดังต่อไปนี้:
ฟังก์ชั่น fn (อาร์กิวเมนต์) {
การแจ้งเตือน (ข้อโต้แย้ง);
-
fn('สวัสดี'); // --> "สวัสดี"<BR>
วัตถุอาร์กิวเมนต์สามารถใช้ได้โดยตรงภายในฟังก์ชันและเป็นตัวระบุพิเศษที่จัดทำโดยภาษานั้นเอง
ที่นี่เกิดขึ้นว่ามีการประกาศพารามิเตอร์อย่างเป็นทางการด้วยชื่อเดียวกัน คุณจะเห็นว่าผลลัพธ์คือ "สวัสดี" แทนที่จะเป็น "[วัตถุวัตถุ]" นั่นคืออาร์กิวเมนต์พารามิเตอร์ที่เป็นทางการครอบคลุมอาร์กิวเมนต์ที่แท้จริงที่จัดทำโดยภาษานั้นเอง
4. พารามิเตอร์ที่เป็นทางการมีลำดับความสำคัญสูงกว่าตัวแปรท้องถิ่นที่ได้รับการประกาศแต่ไม่ได้กำหนด
คัดลอกรหัสรหัสดังต่อไปนี้:
ฟังก์ชั่น fn(ก){
วาร์ ก;
การแจ้งเตือน (ก);
-
fn('สวัสดี'); // --> "สวัสดี"
พารามิเตอร์ที่เป็นทางการของฟังก์ชัน fn คือ a ประโยคแรกในฟังก์ชันจะประกาศตัวแปรเฉพาะที่ a แต่ไม่ได้กำหนดค่า จากข้อเท็จจริงที่ว่าผลลัพธ์เอาต์พุตคือ "สวัสดี" แทนที่จะเป็นไม่ได้กำหนด จะเห็นได้ว่าพารามิเตอร์อย่างเป็นทางการ a มีลำดับความสำคัญสูงกว่าตัวแปรโลคัล a ที่ถูกประกาศเท่านั้น แต่ไม่ได้กำหนดค่า
5. ตัวแปรท้องถิ่นที่ประกาศและกำหนดมีลำดับความสำคัญสูงกว่าพารามิเตอร์ที่เป็นทางการ
คัดลอกรหัสรหัสดังต่อไปนี้:
ฟังก์ชั่น fn(ก){
วาร์ ก = 1;
การแจ้งเตือน (ก);
-
fn('สวัสดี'); // --> "1"
พารามิเตอร์อย่างเป็นทางการของฟังก์ชัน fn คือ a ประโยคแรกในฟังก์ชันจะประกาศตัวแปรเฉพาะที่ a และกำหนดค่าเป็น 1 จากผลลัพธ์ที่ได้คือ "1" แทนที่จะเป็น "hello" เราจะเห็นว่าตัวแปรท้องถิ่น a ที่ประกาศและกำหนดมีลำดับความสำคัญสูงกว่าพารามิเตอร์อย่างเป็นทางการ a
6. เมื่อกำหนดพารามิเตอร์อย่างเป็นทางการให้กับตัวแปรท้องถิ่นที่มีชื่อเดียวกัน
คัดลอกรหัสรหัสดังต่อไปนี้:
ฟังก์ชั่น fn(ก){
วาร์ ก = ก;
การแจ้งเตือน (ก);
-
fn('สวัสดี');
อย่าเพิ่งรันเดาผลลัพธ์ หากคุณปฏิบัติตามจุดที่ 5: ตัวแปรท้องถิ่นที่ประกาศและกำหนดจะมีลำดับความสำคัญสูงกว่าพารามิเตอร์ที่เป็นทางการ จากนั้น a จะไม่ถูกกำหนด แต่ในความเป็นจริงแล้ว a คือ "สวัสดี" นั่นคือ ทางขวา a คือพารามิเตอร์อย่างเป็นทางการ a และทางซ้าย a คือตัวแปรเฉพาะที่ a
a สองตัวตรงนี้ไม่รบกวนซึ่งกันและกัน และไม่ครอบคลุมอีกตัวหนึ่ง สิ่งนี้ขัดแย้งกับสิ่งที่ฉันเพิ่งพูด: ตัวแปรท้องถิ่นที่กำหนดมีลำดับความสำคัญสูงกว่าพารามิเตอร์ที่เป็นทางการ แต่กลไกจะทำในสิ่งที่เราต้องการ เพราะเราไม่ต้องการให้ a ไม่ได้กำหนดไว้หลังจาก var a = a