⊗jsPmClCNG 265 of 505 menu

ตัวแปรนับจำนวนระดับโลกใน JavaScript

นำตัวแปร num ออกมานอกฟังก์ชัน ทำให้มันกลายเป็นตัวแปรระดับโลก:

let num = 1; // ตัวแปรระดับโลก function test() { return function() { console.log(num); num++; }; }

ในกรณีนี้ ฟังก์ชันทั้งหมดที่ถูกส่งกลับมาจะ เปลี่ยนตัวแปรระดับโลกนี้ และตัวนับ จะทำงานขึ้นอยู่กับกันและกัน:

let num = 1; function test() { return function() { console.log(num); num++; }; } let func1 = test(); // ตัวนับตัวแรก func1(); // แสดง 1 func1(); // แสดง 2 let func2 = test(); // ตัวนับตัวที่สอง func2(); // แสดง 3 func2(); // แสดง 4

ทำไมโค้ดก่อนหน้าของเราถึงสร้างตัวนับ ที่ทำงานแยกจากกันได้? ขอย้อนกลับไปที่โค้ดนี้:

function test() { let num = 1; return function() { console.log(num); num++; }; };

เรื่องคือตัวแปร num เป็นตัวแปรระดับท้องถิ่น ภายในฟังก์ชัน test ดังนั้นทุกครั้งที่ เรียกใช้ test ก็จะสร้างตัวแปรระดับท้องถิ่น ของตัวเองขึ้นมา

ดังนั้น ฟังก์ชันที่ถูกส่งกลับมาจะอ้างอิง ไปยังตัวแปรระดับท้องถิ่นของฟังก์ชัน test ของตัวเอง นี่คือวิธีการทำให้ การทำงานเป็นอิสระจากกัน

ถ้าทำให้ num เป็นตัวแปรระดับโลก - นี่ก็คือ Closure เช่นเดียวกัน เพียงแต่ สภาพแวดล้อมทางศัพท์ (Lexical Environment) ของฟังก์ชันที่ถูกส่งกลับมานั้นอ้างอิง ไปที่ตัวแปร num เดียวกัน - การเปลี่ยนแปลงใดๆ กับตัวแปรนี้จะสามารถเห็นได้ใน ทุกฟังก์ชัน

พิจารณาโดยไม่ต้องรันโค้ด ว่าจะแสดงอะไร ในคอนโซล:

let counter = 0; function test() { return function() { console.log(counter); counter++; }; } let func = test; let func1 = func(); let func2 = func(); func1(); func2(); func1(); func2();

พิจารณาโดยไม่ต้องรันโค้ด ว่าจะแสดงอะไร ในคอนโซล:

function test() { let counter = 0; return function() { return function() { console.log(counter); counter++; }; }; } let func = test()(); let func1 = func; let func2 = func; func1(); func2(); func1(); func2();

พิจารณาโดยไม่ต้องรันโค้ด ว่าจะแสดงอะไร ในคอนโซล:

function test() { let counter = 0; return function() { return function() { console.log(counter); counter++; }; }; } let func = test(); let func1 = func(); let func2 = func(); func1(); func2(); func1(); func2();
ไทย
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣTürkmenTürkçeЎзбекOʻzbekTiếng Việt
เราใช้คุกกี้สำหรับการทำงานของเว็บไซต์ การวิเคราะห์ และการปรับเนื้อหาให้เหมาะสมส่วนบุคคล การประมวลผลข้อมูลเกิดขึ้นตาม นโยบายความเป็นส่วนตัว.
ยอมรับทั้งหมด ปรับแต่ง ปฏิเสธ