ล่าสุดการพัฒนาเว็บบทเรียน
×

JS เกี่ยวกับการสอน

JS บ้าน JS บทนำ JS สถานที่ที่จะ JS ส่งออก JS วากยสัมพันธ์ JS งบ JS ความคิดเห็น JS ตัวแปร JS ผู้ประกอบการ JS คณิตศาสตร์ JS การมอบหมาย JS ชนิดข้อมูล JS ฟังก์ชั่น JS วัตถุ JS ขอบเขต JS เหตุการณ์ JS เงื่อนไข JS วิธีสตริง JS เบอร์ JS วิธีการจำนวน JS คณิตศาสตร์ JS วันที่ JS รูปแบบวันที่ JS วันวิธีการ JS แถว JS วิธีการอาร์เรย์ JS booleans JS เปรียบเทียบ JS เงื่อนไข JS สวิตซ์ JS ห่วง For JS ในขณะที่ห่วง JS หยุด JS ประเภทการแปลง JS นิพจน์ทั่วไป JS ข้อผิดพลาด JS แก้จุดบกพร่อง JS hoisting JS โหมดที่เข้มงวด JS คู่มือสไตล์ JS ปฏิบัติที่ดีที่สุด JS ข้อผิดพลาด JS ประสิทธิภาพ JS คำสงวน JS JSON

JS ฟอร์ม

แบบฟอร์มการตรวจสอบ รูปแบบ API

JS วัตถุ

นิยามวัตถุ คุณสมบัติของวัตถุ วิธีการของวัตถุ ต้นแบบวัตถุ

JS ฟังก์ชั่น

นิยามฟังก์ชั่น ค่าฟังก์ชัน ฟังก์ชั่นการภาวนา ปิดฟังก์ชั่น

JS HTML DOM

DOM แนะนำ DOM วิธีการ DOM เอกสาร DOM องค์ประกอบ DOM HTML DOM CSS DOM ภาพเคลื่อนไหว DOM เหตุการณ์ DOM EventListener DOM การเดินเรือ DOM โหนด DOM Nodelist

JS เบราว์เซอร์ BOM

JS Window JS Screen JS Location JS History JS Navigator JS Popup Alert JS Timing JS Cookies

JS ตัวอย่าง

JS ตัวอย่าง JS HTML DOM JS HTML อินพุต JS HTML วัตถุ JS HTML เหตุการณ์ JS เบราว์เซอร์ JS ทดสอบ JS สรุป

JS คู่มืออ้างอิง

JavaScript วัตถุ HTML DOM วัตถุ


 

JavaScript Closures


ตัวแปร JavaScript ที่สามารถอยู่ในขอบเขตท้องถิ่นหรือระดับโลก

ตัวแปรเอกชนสามารถทำไปได้ด้วยการปิด


ตัวแปรทั่วโลก

ฟังก์ชั่นสามารถเข้าถึงตัวแปรทั้งหมดที่กำหนดไว้ในฟังก์ชันเช่นนี้

ตัวอย่าง

function myFunction() {
    var a = 4;
    return a * a;
}
ลองตัวเอง»

แต่ฟังก์ชั่นยังสามารถเข้าถึงตัวแปรที่กำหนดไว้นอกฟังก์ชั่นเช่นนี้

ตัวอย่าง

var a = 4;
function myFunction() {
    return a * a;
}
ลองตัวเอง»

ในตัวอย่างที่ผ่านมาเป็นตัวแปรทั่วโลก

ในหน้าเว็บตัวแปรทั่วโลกอยู่ในวัตถุหน้าต่าง

ตัวแปรทั่วโลกสามารถนำมาใช้ (และมีการเปลี่ยนแปลง) โดยสคริปต์ทั้งหมดในหน้า (และในหน้าต่าง)

ในตัวอย่างแรกเป็นตัวแปรท้องถิ่น

ตัวแปรท้องถิ่นสามารถนำมาใช้เฉพาะภายในฟังก์ชั่นที่มีการกำหนดไว้ มันถูกซ่อนจากฟังก์ชั่นอื่น ๆ และรหัสสคริปต์อื่น ๆ

ตัวแปรสากลและในพื้นที่ที่มีชื่อเดียวกันเป็นตัวแปรที่แตกต่างกัน การปรับเปลี่ยนอย่างใดอย่างหนึ่งไม่ได้ปรับเปลี่ยนอื่น ๆ

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


อายุการใช้งานตัวแปร

ตัวแปรทั่วโลกอาศัยอยู่ตราบเท่าที่ใบสมัครของคุณ (หน้าต่างของคุณ / หน้าเว็บของคุณ) ชีวิต

ตัวแปรท้องถิ่นมีชีวิตสั้น พวกเขาถูกสร้างขึ้นเมื่อฟังก์ชั่นที่มีการอุทธรณ์และฟังก์ชั่นลบเมื่อเสร็จสิ้น


เคาเตอร์ Dilemma

สมมติว่าคุณต้องการใช้ตัวแปรสำหรับการนับบางสิ่งบางอย่างและคุณต้องการนับนี้จะพร้อมใช้งานฟังก์ชั่นทั้งหมด

คุณสามารถใช้ตัวแปรทั่วโลกและฟังก์ชั่นเพื่อเพิ่มเคาน์เตอร์:

ตัวอย่าง

var counter = 0;

function add() {
    counter += 1;
}

add();
add();
add();

// the counter is now equal to 3
ลองตัวเอง»

เคาน์เตอร์ควรจะมีการเปลี่ยนแปลงโดย add() ฟังก์ชั่น

ปัญหาคือว่าสคริปต์ใด ๆ บนหน้าเว็บสามารถเปลี่ยนเคาน์เตอร์โดยไม่ต้องโทร add()

ถ้าผมประกาศเคาน์เตอร์ภายในฟังก์ชั่นที่ไม่มีใครจะสามารถมีการเปลี่ยนแปลงได้โดยไม่ต้องเรียกเพิ่ม ():

ตัวอย่าง

function add() {
    var counter = 0;
    counter += 1;
}

add();
add();
add();

// the counter should now be 3, but it does not work !
ลองตัวเอง»

มันไม่ทำงาน! เวลาที่ผมเรียกว่าทุก add() ฟังก์ชั่นเคาน์เตอร์ถูกกำหนดเป็น 1

ฟังก์ชั่นภายในงาน JavaScript สามารถแก้ปัญหานี้


ฟังก์ชั่นจาวาสคริปต์ที่ซ้อนกัน

ฟังก์ชั่นทุกคนสามารถเข้าถึงขอบเขตทั่วโลก

ในความเป็นจริงใน JavaScript, ฟังก์ชั่นทุกคนสามารถเข้าถึงขอบเขต "สูงกว่า" พวกเขา

JavaScript สนับสนุนการทำงานที่ซ้อนกัน ฟังก์ชั่นที่ซ้อนกันมีการเข้าถึงขอบเขต "สูงกว่า" พวกเขา

ในตัวอย่างนี้ฟังก์ชั่นด้าน plus() มีการเข้าถึงตัวแปรเคาน์เตอร์ในการทำงานของผู้ปกครอง:

ตัวอย่าง

function add() {
    var counter = 0;
    function plus() {counter += 1;}
    plus();   
    return counter;
}
ลองตัวเอง»

ซึ่งอาจมีการแก้ไขภาวะที่กลืนไม่เข้าคายไม่ออกเคาน์เตอร์ถ้าเราสามารถเข้าถึง plus() ฟังก์ชั่นจากภายนอก

นอกจากนี้เรายังต้องการที่จะหาวิธีการที่จะดำเนินการนับ = 0 เพียงครั้งเดียว

เราจำเป็นต้องปิด


ปิด JavaScript

โปรดจำไว้ว่าฟังก์ชั่นการเรียกตัวเอง? ฟังก์ชั่นนี้ทำอะไร?

ตัวอย่าง

var add = (function () {
    var counter = 0;
    return function () {return counter += 1;}
})();

add();
add();
add();

// the counter is now 3
ลองตัวเอง»

ตัวอย่างอธิบาย

ตัวแปรเพิ่มมีการกำหนดค่าตอบแทนของฟังก์ชั่นในตัวเองกล่าวอ้าง

ฟังก์ชั่นในตัวเองกล่าวอ้างเพียงทำงานครั้งเดียว มันชุดเคาน์เตอร์ให้เป็นศูนย์ (0) และผลตอบแทนการแสดงออกที่ฟังก์ชั่น

เพิ่มวิธีนี้จะกลายเป็นฟังก์ชั่น ส่วนที่ "ยอดเยี่ยม" ก็คือว่ามันสามารถเข้าถึงเคาน์เตอร์อยู่ในขอบเขตของผู้ปกครอง

นี้เรียกว่าปิด JavaScript. มันทำให้มันเป็นไปได้สำหรับฟังก์ชั่นที่จะมีตัวแปร "ส่วนตัว"

เคาน์เตอร์มีการป้องกันโดยขอบเขตของฟังก์ชั่นที่ไม่ระบุชื่อและสามารถเปลี่ยนแปลงได้โดยใช้ฟังก์ชั่นเพิ่ม

ปิดเป็นฟังก์ชั่นที่มีการเข้าถึงขอบเขตแม่แม้หลังจากที่ฟังก์ชั่นที่ผู้ปกครองได้ปิด