การปิดและแกงเป็นเทคนิคที่พบได้ทั่วไปและค่อนข้างสูงที่ใช้ในจาวาสคริปต์ ภาษาการเขียนโปรแกรมที่ใช้งานได้ทั้งหมดสนับสนุนแนวคิดทั้งสองนี้ ดังนั้นหากเราต้องการใช้ประโยชน์จากลักษณะการเขียนโปรแกรมที่ใช้งานได้อย่างเต็มที่ใน JavaScript เราจำเป็นต้องมีความเข้าใจในเชิงลึกของแนวคิดทั้งสองนี้ การปิดเป็นรากฐานที่ขาดไม่ได้สำหรับการแกงกะหรี่
1. แนวคิดของการแกงกะหรี่
ในวิทยาศาสตร์คอมพิวเตอร์แกงเป็นเทคนิคในการแปลงฟังก์ชั่นที่ยอมรับพารามิเตอร์หลายตัวเป็นฟังก์ชันที่ยอมรับพารามิเตอร์เดียว (พารามิเตอร์แรกของฟังก์ชันดั้งเดิม) และส่งคืนฟังก์ชันใหม่ที่ยอมรับพารามิเตอร์ที่เหลือและส่งกลับผลลัพธ์ เทคโนโลยีได้รับการตั้งชื่อตาม Logician Haskell Curry โดย Christopher Strachey แม้ว่ามันจะถูกคิดค้นโดย Moses Schnfinkel และ Gottlob Frege แกงกะหรี่อ้างว่า "ถ้าคุณแก้ไขพารามิเตอร์บางอย่างคุณจะได้รับฟังก์ชั่นที่ยอมรับพารามิเตอร์ที่เหลือ" ดังนั้นสำหรับฟังก์ชั่น YX ที่มีตัวแปรสองตัวถ้า y = 2 ได้รับการแก้ไขฟังก์ชัน 2x ที่มีตัวแปรหนึ่งตัวจะได้รับ
Currying หมายถึงการผ่านพารามิเตอร์บางอย่างของฟังก์ชั่นล่วงหน้าเพื่อให้ได้ฟังก์ชั่นง่าย ๆ แต่พารามิเตอร์ล่วงหน้าจะถูกบันทึกไว้ในการปิดดังนั้นจึงมีคุณสมบัติที่แปลกประหลาด ตัวอย่างเช่น:
var adder = function (num) {return function (y) {return num + y; }} var inc = adder (1); var dec = adder (-1)ตัวแปรสองตัว INC/DEC ที่นี่เป็นฟังก์ชั่นใหม่สองฟังก์ชั่นซึ่งสามารถเรียกได้ในวงเล็บเช่นการใช้งานในตัวอย่างต่อไปนี้:
// Inc, DEC ตอนนี้เป็นฟังก์ชั่นใหม่สองฟังก์ชั่นซึ่งใช้ในการถ่ายโอนค่าพารามิเตอร์ขาเข้า (+/-) 1print (Inc (99)); // 100print (ธ.ค. (101)); // 100print (adder (100) (2)); // 102print (adder (2) (100));
2. แอปพลิเคชันของแกงกะหรี่
ตามคุณสมบัติการแกงกะหรี่เราสามารถเขียนโค้ดที่น่าสนใจได้มากขึ้น ตัวอย่างเช่นในการพัฒนาส่วนหน้าเรามักจะพบกับสถานการณ์นี้ เมื่อคำขอส่งคืนจากเซิร์ฟเวอร์เราจำเป็นต้องอัปเดตองค์ประกอบหน้าเฉพาะบางส่วนนั่นคือแนวคิดของการรีเฟรชบางส่วน การใช้รีเฟรชในท้องถิ่นนั้นง่ายมาก แต่รหัสนั้นง่ายต่อการเขียนเป็นระเบียบ และหากใช้การแกงกะหรี่มันสามารถทำให้รหัสของเราสวยงามอย่างมากและทำให้ง่ายต่อการบำรุงรักษา ลองมาดูตัวอย่าง:
// การอัปเดตจะส่งคืนฟังก์ชั่นซึ่งสามารถตั้งค่าแอตทริบิวต์ ID เป็นเนื้อหาขององค์ประกอบเว็บของการอัปเดตฟังก์ชันรายการ (รายการ) {return function (ข้อความ) {$ ("div#"+รายการ) .html (ข้อความ); }} // คำขอ AJAX เมื่อสำเร็จพารามิเตอร์การโทรกลับการรีเฟรช (URL, การโทรกลับ) {var params = {type: "echo", ข้อมูล: ""}; $ .ajax ({type: "post", url: url, cache: false, async: true, ประเภทข้อมูล: "json", ข้อมูล: params, // การเรียกความสำเร็จ: ฟังก์ชั่น (ข้อมูล, สถานะ) {callback (data);}, // ข้อผิดพลาดในการโทร });} Refresh ("action.do?target=news", Update ("Newspanel")); รีเฟรช ("action.do?target=articles", อัปเดต ("PlicisePanel")); รีเฟรช ("action.do? ในกรณีที่ฟังก์ชั่นการอัปเดตเป็นอินสแตนซ์ของแกงซึ่งจะส่งคืนฟังก์ชั่นนั่นคือ: Update ("NewsPanel") = function (text) {$ ("div#newspanel"). html (ข้อความ);}เนื่องจากค่าส่งคืนของการอัปเดต ("Newspanel") เป็นฟังก์ชันและพารามิเตอร์ที่ต้องการคือสตริงในการเรียก Ajax Call of Refresh เมื่อความสำเร็จข้อมูลที่ส่งคืนโดยการโทรกลับจะถูกส่งผ่านไปยังการโทรกลับดังนั้นจึงตระหนักถึงการรีเฟรชของแผงหนังสือพิมพ์ การรีเฟรชของบทความบทความอื่น ๆ PANLEPANEL และ PICANT PICANT PICHUEREPANEL ล้วนเป็นการนำมาใช้ในลักษณะนี้ ด้วยวิธีนี้ความสามารถในการอ่านและการบำรุงรักษาของรหัสได้รับการปรับปรุง
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ JavaScript คุณสามารถตรวจสอบ: "คำแนะนำอ้างอิง JavaScript" และ "คู่มือสไตล์รหัส JavaScript" ฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น