بادئ ذي بدء، هناك مفهوم: إنها ليست لغة تدعم الوظائف، ويمكن تسمية هذه اللغة بـ "اللغة الوظيفية". بالإضافة إلى استدعائها، فإن الوظائف في اللغات الوظيفية لها أيضًا بعض الخصائص الأخرى. هناك ثلاث نقاط:
1. الوظائف هي المعاملات
2. حفظ البيانات داخل الوظيفة
3. العمليات داخل الوظيفة ليس لها آثار جانبية خارج الوظيفة
1. الوظائف هي المعاملات
عند استدعاء دالة عادية، يمكن فهمها بشكل تجريدي على النحو التالي: الدالة هي عامل، والمعلمات التي تم تمريرها هي المعاملات؛
ولكن عند استخدام دالة في JavaScript كمعلمة لوظيفة أخرى، يتم تمرير مرجع، ويمكن فهم هذه "المعلمة الواردة" على أنها مُعامل. الاستنتاج هو أن الوظائف (باعتبارها "المعلمات الواردة") لها معنى المعاملات، وأن "المعلمات الوظيفية" لا تختلف عن المعلمات العادية.
2. حفظ البيانات داخل الوظيفة
في اللغات الأمرية، لا يمكن حفظ المتغيرات الخاصة (المتغيرات المحلية) داخل الوظائف. من منظور تنفيذ البرنامج، يتم تخصيص المتغيرات المحلية على المكدس، وبعد انتهاء تنفيذ الوظيفة، يتم تحرير المكدس المشغول. لذلك لا يمكن حفظ البيانات الموجودة داخل الوظيفة.
في وظيفة JavaScript، يمكن تعديل المتغيرات الخاصة داخل الوظيفة، وعند "الدخول" إلى الوظيفة مرة أخرى، ستستمر الحالة المعدلة. المثال التالي يوضح هذه الخاصية:
انسخ رمز الكود كما يلي:
مجموعة فار، الحصول على؛
وظيفة MyFunc () {
قيمة فار = 100؛
الدالة set_value(v){
القيمة = الخامس؛
}
الدالة get_value(){
قيمة الإرجاع؛
}
مجموعة = set_value؛
الحصول على = get_value؛
}
MyFunc();
console.log(get()); //100
مجموعة (300)؛
console.log(get()); //300
والفائدة الواضحة هي أنه إذا كان من الممكن استمرار جزء من البيانات داخل دالة، فيمكن للوظيفة (كمنشئ) استخدام البيانات لتنفيذ العمليات عند تعيينها لمثيل وبين مثيلات متعددة، نظرًا لوجود البيانات في مناطق مختلفة إغلاق، فإنها لن تؤثر على بعضها البعض.
لشرح ذلك بمصطلحات موجهة للكائنات، فهذا يعني أن الحالات المختلفة لها بياناتها الخاصة (المنسوخة من بعض البيانات العامة). المثال التالي يوضح هذه الخاصية:
انسخ رمز الكود كما يلي:
وظيفة ميوبجيكت () {
قيمة فار = 100؛
this.setValue = function(){
القيمة = الخامس؛
}
this.showValue = function(){
console.log(value);
}
}
var obj1 = new MyObject();
var obj2 = new MyObject();
obj2.setValue(300);
obj1.showValue();
3. العمليات داخل الوظيفة ليس لها آثار جانبية خارج الوظيفة
معنى هذه الميزة هو:
* تستخدم الدالة معلمة الإدخال لتنفيذ العمليات دون تعديلها (تستخدم كمعلمة قيمة بدلاً من معلمة متغيرة)
* لن يتم تعديل قيمة البيانات الأخرى خارج الوظيفة (مثل المتغيرات العامة) أثناء العملية.
* بعد انتهاء العملية يتم نقل القيمة إلى النظام الخارجي من خلال "إرجاع الدالة"
هذه الوظائف ليس لها أي آثار جانبية على النظام الخارجي أثناء التشغيل. ومع ذلك، لاحظنا أن JavaScript تسمح بالرجوع إلى المتغيرات العامة وتعديلها داخل الوظائف، ويمكن حتى الإعلان عن المتغيرات العامة. وهذا في الواقع يدمر خصائصه الوظيفية.
بالإضافة إلى ذلك، تسمح JavaScript أيضًا بتعديل أعضاء الكائنات والمصفوفات داخل الوظائف - يجب تعديل هؤلاء الأعضاء عن طريق أساليب الكائنات بدلاً من الوظائف الأخرى خارج نظام الكائنات.
لذلك: لا يمكن ضمان هذه الميزة في JavaScript إلا من خلال عادات البرمجة للمطورين.