ทั้งหมดที่กำหนดไว้นอกร่างกายฟังก์ชั่นเป็นตัวแปรระดับโลกและที่กำหนดไว้ในตัวแปรฟังก์ชั่นเป็นตัวแปรท้องถิ่น คำจำกัดความที่นี่หมายถึงการประกาศโดย var
JavaScript มีแนวคิดทั่วโลกโดยนัยซึ่งหมายความว่าตัวแปรใด ๆ ที่คุณไม่ได้ประกาศจะกลายเป็นคุณสมบัติของวัตถุระดับโลก ตัวอย่างเช่น:
การคัดลอกรหัสมีดังนี้:
ฟังก์ชั่นทดสอบ () {
myName = "Huming";
การแจ้งเตือน (myname);
-
ทดสอบ(); // "Huming"
การแจ้งเตือน (myname); // "Huming"
ผลลัพธ์ทั้งสองนั้นเหมือนกันซึ่งระบุว่า MyName เป็นตัวแปรทั่วโลก
ดังนั้นจึงมีความแตกต่างระหว่างตัวแปรทั่วโลกโดยนัยและตัวแปรทั่วโลกที่กำหนดไว้อย่างดีหรือไม่? - จะต้องมีคำตอบดูตัวอย่างต่อไปนี้:
การคัดลอกรหัสมีดังนี้:
// กำหนดตัวแปรทั่วโลกสามตัว
var global_test1 = 1;
global_test2 = 2; // ตำราลบ
(การทำงาน () {
global_test3 = 3; // ตำราลบ
-
// พยายามลบ
ลบ global_test1; // เท็จ
ลบ global_test2; // จริง
ลบ global_test3; // จริง
// ทดสอบการลบ
การแจ้งเตือน (typeof global_test1); // "ตัวเลข"
การแจ้งเตือน (typeof global_test2); // "ไม่ได้กำหนด"
การแจ้งเตือน (typeof global_test3); // "ไม่ได้กำหนด"
จากตัวอย่างข้างต้นเราจะเห็นได้ว่า Global_Test1 ที่กำหนดโดย VAR นอกฟังก์ชั่นไม่สามารถลบได้ในขณะที่ Global_Test2 และ Global_Test3 ไม่ได้กำหนดโดย VAR จะถูกลบ (ไม่ว่าจะถูกสร้างขึ้นในร่างกายฟังก์ชั่นหรือไม่)
โดยสรุปตัวแปรทั่วโลกที่ประกาศโดย VAR นอกฟังก์ชั่นไม่สามารถลบได้ในขณะที่ตัวแปรทั่วโลกโดยนัยสามารถลบได้
หมายเหตุที่นี่: JavaScript มีพฤติกรรมที่เรียกว่า "Hoisting" (แขวน/หยุดการแยกวิเคราะห์/เตรียม)
ลองใช้ตัวอย่างเพื่อแสดง:
การคัดลอกรหัสมีดังนี้:
var myname = "huming"; // ประกาศตัวแปรทั่วโลก
ฟังก์ชั่นทดสอบ () {
การแจ้งเตือน (myname);
var myname = "local_huming";
การแจ้งเตือน (myname);
-
ทดสอบ();
คุณเดาว่าเนื้อหาของการแจ้งเตือนนั้นสอดคล้องกันสองครั้งหรือไม่? - เห็นได้ชัดว่าไม่สอดคล้องกันมันจำเป็นหรือไม่ที่จะบอกว่าความสอดคล้องนั้น? - ผลลัพธ์ที่แท้จริงคือ: "ไม่ได้กำหนด", "local_huming"
ตัวอย่างข้างต้นเทียบเท่ากับ
การคัดลอกรหัสมีดังนี้:
var myname = "huming"; // ประกาศตัวแปรทั่วโลก
ฟังก์ชั่นทดสอบ () {
var myname;
การแจ้งเตือน (maname); <br> myname = "local_huming";
การแจ้งเตือน (myname); // "ท้องถิ่น"
-
ทดสอบ();
MyName การแจ้งเตือนครั้งแรกไม่ใช่ตัวแปรส่วนกลางที่คุณคิด แต่ตัวแปรท้องถิ่นภายในขอบเขต (ร่างกายฟังก์ชั่น) แม้ว่าจะยังไม่ได้รับการประกาศ แต่ก็ถือได้ว่าเป็นการประกาศ นี่คือสิ่งที่เรียกว่า "Hoisting"
สิ่งนี้ควรเข้าใจ หากคุณใช้ตัวแปรในฟังก์ชั่นร่างกายและทำการรวมตัวใหม่ในภายหลังอาจมีข้อผิดพลาดเกิดขึ้น
การเขียนข้อกำหนด:
การคัดลอกรหัสมีดังนี้:
ฟังก์ชั่นทดสอบ () {
var a = 1
b = 2,
c = a + b
d = {}
E,
f;
// ฟังก์ชั่นร่างกาย ...
-
ประโยชน์คือ:
1. ตัวแปรท้องถิ่นทั้งหมดถูกกำหนดไว้ที่จุดเริ่มต้นของฟังก์ชั่นซึ่งสะดวกสำหรับการค้นหา
2. ป้องกันข้อผิดพลาดเชิงตรรกะจากการใช้ก่อนที่ตัวแปรจะถูกกำหนด
คุณเข้าใจการประกาศตัวแปรของ JavaScript หรือไม่? เนื้อหาข้างต้นมีรายละเอียดมากและเข้าใจง่าย บทสรุปสุดท้ายก็เกี่ยวข้องกันมาก อย่าพลาด