ประการแรก มีแนวคิด: ไม่ใช่ภาษาที่รองรับฟังก์ชันต่างๆ นอกจากจะถูกเรียกแล้ว ฟังก์ชันในภาษาเชิงฟังก์ชันยังมีคุณสมบัติอื่นๆ อีกด้วย มีสามจุด:
1. ฟังก์ชันเป็นตัวถูกดำเนินการ
2. บันทึกข้อมูลภายในฟังก์ชัน
3. การทำงานภายในฟังก์ชันไม่มีผลข้างเคียงภายนอกฟังก์ชัน
1. ฟังก์ชันเป็นตัวถูกดำเนินการ
เมื่อเรียกใช้ฟังก์ชันปกติ สามารถเข้าใจได้โดยนามธรรมว่า ฟังก์ชันคือตัวดำเนินการ และพารามิเตอร์ที่ส่งเข้ามาคือตัวถูกดำเนินการ
แต่เมื่อใช้ฟังก์ชันใน JavaScript เป็นพารามิเตอร์ของฟังก์ชันอื่น การอ้างอิงจะถูกส่งผ่าน และ "พารามิเตอร์ขาเข้า" นี้สามารถเข้าใจได้ว่าเป็นตัวถูกดำเนินการ ข้อสรุปก็คือ ฟังก์ชัน (ในฐานะ "พารามิเตอร์ขาเข้า") มีความหมายของตัวถูกดำเนินการ และ "พารามิเตอร์ฟังก์ชัน" ก็ไม่แตกต่างจากพารามิเตอร์ทั่วไป
2. บันทึกข้อมูลภายในฟังก์ชัน
ในภาษาที่จำเป็น ตัวแปรส่วนตัว (ตัวแปรท้องถิ่น) ภายในฟังก์ชันไม่สามารถบันทึกได้ จากมุมมองของการทำงานของโปรแกรม ตัวแปรโลคัลจะถูกจัดสรรบนสแต็ก และหลังจากการทำงานของฟังก์ชันสิ้นสุดลง สแต็กที่ถูกครอบครองจะถูกปล่อย ดังนั้นจึงไม่สามารถบันทึกข้อมูลภายในฟังก์ชันได้
ในฟังก์ชัน JavaScript ตัวแปรส่วนตัวภายในฟังก์ชันสามารถแก้ไขได้ และเมื่อ "เข้าสู่" ฟังก์ชันอีกครั้ง สถานะที่แก้ไขจะดำเนินต่อไป ตัวอย่างต่อไปนี้แสดงให้เห็นถึงคุณลักษณะนี้:
คัดลอกรหัสรหัสดังต่อไปนี้:
ชุด var, รับ;
ฟังก์ชั่น MyFunc(){
ค่าวาร์ = 100;
ฟังก์ชั่น set_value (วี) {
ค่า = โวลต์;
-
ฟังก์ชั่นget_value(){
ค่าส่งคืน;
-
ชุด = set_value;
รับ = get_value;
-
MyFunc();
console.log(get()); //100
ชุด(300);
console.log(get()); //300
ประโยชน์ที่ชัดเจนก็คือ หากชิ้นส่วนของข้อมูลสามารถคงอยู่ในฟังก์ชันได้ ฟังก์ชัน (ในฐานะตัวสร้าง) จะสามารถใช้ข้อมูลเพื่อดำเนินการเมื่อกำหนดให้กับอินสแตนซ์ และระหว่างหลายอินสแตนซ์ได้ เนื่องจากข้อมูลมีอยู่ใน In ที่แตกต่างกัน ปิดไปก็ไม่กระทบกัน
หากต้องการอธิบายในแง่เชิงวัตถุ หมายความว่าอินสแตนซ์ต่างๆ มีข้อมูลส่วนตัวของตัวเอง (คัดลอกมาจากข้อมูลสาธารณะบางส่วน) ตัวอย่างต่อไปนี้แสดงให้เห็นถึงคุณลักษณะนี้:
คัดลอกรหัสรหัสดังต่อไปนี้:
ฟังก์ชั่น MyObject(){
ค่าวาร์ = 100;
this.setValue = ฟังก์ชั่น(){
ค่า = โวลต์;
-
this.showValue = ฟังก์ชั่น () {
console.log(ค่า);
-
-
var obj1 = MyObject ใหม่ ();
var obj2 = MyObject ใหม่ ();
obj2.setValue(300);
obj1.showValue(); //100;
3. การทำงานภายในฟังก์ชันไม่มีผลข้างเคียงภายนอกฟังก์ชัน
ความหมายของคุณลักษณะนี้คือ:
* ฟังก์ชั่นใช้พารามิเตอร์รายการเพื่อดำเนินการโดยไม่ต้องแก้ไข (ใช้เป็นพารามิเตอร์ค่าแทนที่จะเป็นพารามิเตอร์ตัวแปร)
* ค่าของข้อมูลอื่นนอกฟังก์ชัน (เช่น ตัวแปรร่วม) จะไม่ได้รับการแก้ไขระหว่างการดำเนินการ
* หลังจากการดำเนินการเสร็จสิ้น ค่าจะถูกโอนไปยังระบบภายนอกผ่าน "การส่งคืนฟังก์ชัน"
ฟังก์ชั่นดังกล่าวไม่มีผลข้างเคียงต่อระบบภายนอกระหว่างการใช้งาน อย่างไรก็ตาม เราสังเกตเห็นว่า JavaScript อนุญาตให้ใช้อ้างอิงและแก้ไขตัวแปรส่วนกลางภายในฟังก์ชันได้ และยังสามารถประกาศตัวแปรส่วนกลางได้ด้วย สิ่งนี้ทำลายลักษณะการทำงานของมันจริงๆ
นอกจากนี้ JavaScript ยังอนุญาตให้แก้ไขสมาชิกอ็อบเจ็กต์และอาเรย์ภายในฟังก์ชันได้ - สมาชิกเหล่านี้ควรได้รับการแก้ไขด้วยวิธีอ็อบเจ็กต์ แทนที่จะเป็นฟังก์ชันอื่นนอกระบบอ็อบเจ็กต์
ดังนั้น: คุณลักษณะของ JavaScript นี้รับประกันได้จากพฤติกรรมการเขียนโปรแกรมของนักพัฒนาเท่านั้น