3. ينشأ النوع من JavaScript وينتمي إلى JavaScript،
في الواقع إلى تحويل لغات البرمجة المتقدمة إلى تعليمات الآلة النهائية بغض النظر عما إذا تم تسليم جافا سكريبت الذي نكتبه إلى المتصفح أو تنفيذ العقدة، في النهاية يجب تنفيذه بواسطة وحدة المعالجة المركزية، لذلك نحتاج إلى محرك جافا سكريبت لمساعدتنا في ترجمة كود جافا سكريبت إلى تعليمات وحدة المعالجة المركزية لتنفيذ
نأخذ WebKit كعمود يتكون في الواقع من جزأين:
WebCore: مسؤول عن تحليل HTML وتخطيطه وعرضه والأعمال الأخرى ذات الصلة
JavaScriptCore: تحليل وتنفيذ
كائن متغير VO (كائن متغير) في أحدث معايير ECMA، يحتوي VO بالفعل على اسم آخر للبيئة المتغيرة VE
GO (كائن كلوبال) وسياق التنفيذ العالمي
AO (كائن التنشيط). ) يتضمن
ستخصص JavaScript الذاكرة لنا عند تحديد المتغيرات
يخصص JS الذاكرة لأنواع البيانات الأساسية مباشرة في مساحة المكدس أثناء التنفيذ؛
سيؤدي تخصيص ذاكرة JS لأنواع البيانات المعقدة إلى فتح مساحة في ذاكرة الكومة، والإشارة إلى متغير قيمة إرجاع المؤشر لهذه المساحة
حجم الذاكرة محدود ، لذلك عندما تنتهي الذاكرة مطلوب، يجب أن يتم إصداره لتحرير المزيد من مساحة الذاكرة.
مجموعة البيانات المهملة باللغة الإنجليزية هي مجموعة البيانات المهملة أو GC.
بالنسبة للكائنات التي لم تعد مستخدمة، فإننا نسميها القمامة، فهي تحتاج إلى إعادة تدويرها لتحرير المزيد من مساحة الذاكرة. جامع البيانات المهملة، نسميه أيضًا GC باختصار، لذلك ترى في العديد من الأماكن أن GC يشير في الواقع إلى جامع البيانات المهملة
تعريف الإغلاق في علوم الكمبيوتر (ويكيبيديا):
الإغلاق (بالإنجليزية: Closure)، ويُعرف أيضًا بالإغلاق المعجمي (Lexical Closure) أو الإغلاق الوظيفي (الإغلاق الوظيفي)؛
هي تقنية تنفذ الربط المعجمي في لغات البرمجة التي تدعم وظائف من الدرجة الأولى؛
في التنفيذ، الإغلاق هو هيكل يخزن الوظيفة والبيئة المرتبطة بها (أي ما يعادل جدول البحث عن الرمز)؛
أكبر فرق بين الإغلاق والوظيفة هو أنه عند التقاط الإغلاق، سيتم تحديد متغيراته الحرة في وقت الالتقاط، بحيث يمكن تشغيله كالمعتاد حتى لو كان خارج السياق في وقت
الالتقاط ظهر مفهوم الإغلاق في ستينيات القرن العشرين. وكان أول برنامج لتنفيذ عمليات الإغلاق هو Scheme، حتى نتمكن من فهم سبب وجود عمليات إغلاق في JavaScript؛
لأن الكثير من التصميمات في JavaScript مستمدة من Scheme؛
دعونا نلقي نظرة على شرح MDN لإغلاقات JavaScript:
يتم تجميع الوظيفة مع مرجع إلى حالتها المحيطة (البيئة المعجمية) (أو تكون الوظيفة محاطة بمراجع). وبعبارة أخرى، يسمح لك الإغلاق بالوصول إليها داخل وظيفة داخلية للنطاق وظيفتها الخارجية؛
في JavaScript، عندما يتم إنشاء دالة، سيتم إنشاء الإغلاق في نفس الوقت الذي يتم فيه إنشاء الوظيفة
function foo() {; اسم فار = "لماذا" العمر = 18 شريط الوظائف () { console.log ("الشريط"، الاسم) } شريط الإرجاع}var fun = foo()fun()
ملخص:
تعتبر الدالة الوظيفية العادية بمثابة إغلاق إذا تمكنت من الوصول إلى المتغيرات الحرة التي تعمل عليها الطبقة الخارجية؛
من منظور واسع: الوظائف في JavaScript هي عمليات إغلاق؛
من وجهة نظر ضيقة: إذا وصلت دالة في JavaScript إلى متغير خارجي،
إلى النطاق العام:
المتصفح: نافذة
بيئة العقدة: {}
وظيفة السهم هي طريقة لكتابة الوظائف المضافة بعد ES6، وهي أكثر إيجازًا من تعبيرات الوظائف؛
لن تربط وظائف السهم هذه وسمات الوسائط؛
لا يمكن استخدام وظائف السهم كمنشئات (لا يمكن استخدامها مع وظائف جديدة، سيتم طرح خطأ).
عبارة عن مصفوفة (زائفة) (تشبه المصفوفة) تتوافق مع المعلمات التي تم تمريرها إلى الوظيفة
التي
هناك مفهوم مهم جدًا في البرمجة الوظيفية يسمى الدوال البحتة JavaScript تتوافق مع مواصفات البرمجة الوظيفية، لذلك هناك أيضًا مفهوم الدوال البحتة
في ويكيبيديا:
في البرمجة، إذا كانت الوظيفة تستوفي الشروط التالية، فإن هذه الوظيفة تسمى وظيفة خالصة. عندما يكون للوظيفة نفس قيمة الإدخال، فإنها تحتاج إلى إنتاج نفس الإخراج. لا علاقة لمخرجات الوظيفة بالمعلومات المخفية الأخرى أو حالات أخرى غير قيمة الإدخال، لا يمكن أن يكون للوظائف غير المرتبطة بالمخرجات الخارجية التي تم إنشاؤها بواسطة أجهزة الإدخال/الإخراج تأثيرات جانبية وظيفية يمكن ملاحظتها لغويًا، مثل "أحداث التشغيل"، أو التسبب في إخراج أجهزة الإخراج، أو تغيير محتويات كائنات أخرى غير قيم الإخراج. . ملخص:
يجب أن تنتج المدخلات المحددة مخرجات معينة؛
أثناء تنفيذ وظيفة ما، لا يمكن أن تحدث أي آثار جانبية
:
يعد Currying أيضًا مفهومًا مهمًا جدًا في البرمجة الوظيفية، توضح ويكيبيديا:
في علوم الكمبيوتر، Currying (Currying)، والتي تُترجم أيضًا باسم Currying أو Currying، هي دالة تقبل معلمات متعددة، وتصبح دالة تتلقى معلمة واحدة (المعلمة الأولى للوظيفة الأصلية)، وترجع وظيفة جديدة تقبل الوسائط المتبقية وإرجاع نتيجة مطالبة متقنة: إذا قمت بإصلاح وسائط معينة، فستحصل على
ملخص دالة يقبل الوسائط المتبقية:
قم بتمرير جزء فقط من المعلمات إلى الوظيفة لاستدعائها، واتركها تعيد منطقة الوظيفة لمعالجة المعلمات المتبقية؛
تسمى هذه العملية بالكاري.
لماذا هناك حاجة إلى الكاري:
في البرمجة الوظيفية، نأمل غالبًا أن تكون المشكلة التي تعالجها الوظيفة بسيطة قدر الإمكان، بدلاً من تسليم الكثير من المعالجة إلى وظيفة للتعامل معها
function foo(x,y,c) { العودة س + ص + ج } console.log(foo(10,20,30)) // دالة الكاري مجموع (س) { وظيفة العودة (ذ) { وظيفة العودة (ض) { العودة س + ص + ض } } } فار أ = مجموع(10)(20)(30) console.log(أ) // تبسيط الكاري var sum2 = x => y => z => { العودة س + ص + ض } console.log(sum2(10)(20)(30))الوظيفة
الوظيفة المدمجة (الإنشاء) هي تقنية وطريقة لاستخدام الوظائف في تطوير JavaScript:
على سبيل المثال، نحتاج الآن إلى استدعاء دالة على بيانات معينة وتنفيذ وظيفتين fn1 وfn2 بالتسلسل. إذا كنا بحاجة إلى استدعاء وظيفتين في كل مرة، فستبدو العملية متكررة الجمع بين هاتين الوظيفتين واستدعاءهما واحدة تلو الأخرى تلقائيًا؟
هذه العملية عبارة عن مزيج من الوظائف، والتي نسميها "إنشاء
مع عبارة
with
لأنها قد تكون مصدرًا للأخطاء ومشاكل التوافق
'} // فار الرسالة = "مرحبا بالعالم" وظيفة فو () { شريط الوظائف () { مع (obj2) { console.log(رسالة) } } حاجِز() }
foo()
eval هي وظيفة خاصة يمكنها تشغيل السلسلة الواردة كرمز JavaScript
var strFn = 'var message = "Hello world"console.log(message);'; eval(strFn)
لا يُنصح باستخدام eval في التطوير:
سهولة قراءة كود التقييم سيئة للغاية (تعد سهولة قراءة الكود مبدأً مهمًا للكود عالي الجودة)؛
eval عبارة عن سلسلة، لذا قد يتم العبث بها أثناء التنفيذ، مما قد يتسبب في خطر التعرض للهجوم؛
يجب أن يمر تنفيذ التقييم عبر مترجم JS ويجب تحسينه بواسطة محرك JS؛
هو وضع جافا سكريبت مقيد، مما يجعل الكود ينفصل ضمنيًا عن "الوضع القذر" عندما تكتشف المتصفحات التي تدعم الوضع الصارم الوضع الصارم في التعليمات البرمجية، فإنها ستراقب التعليمات البرمجية وتنفذها بطريقة أكثر صرامة، وسيؤدي الوضع الصارم إلى إزالة بعض الأخطاء الصامتة الأصلية عن طريق طرح الأخطاء، مما يسمح لمحرك Js بإجراء المزيد من التحسينات عند تنفيذ التعليمات البرمجية بشكل دوري (ليس هناك حاجة للتعامل مع بعض الصياغة الخاصة)
"استخدم الوضع الصارم"; // تشغيل الوضع الصارم var message = "hello World" console.log(message)
قيود الوضع الصارم <br/ > هنا نتحدث عن بعض القيود قيود بناء الجملة الصارمة في الوضع الصارم:
تم تصميم JavaScript ليكون أسهل للمطورين المبتدئين، لذلك في بعض الأحيان يتم تحليل بناء الجملة غير الصحيح بشكل طبيعي، ومع ذلك، في الوضع الصارم، سيتم التعامل مع هذه الأخطاء على أنها أخطاء حتى
// 1. إنشاء رسالة متغيرة عامة عن طريق الخطأ = "Hello World" console.log(رسالة) وظيفة فو () { العمر=20 } فو ()قد يتسبب الوضع الصارم
لـ Console.log(age)
// خطأ ثابت افتراضي true.name ='xialuo'; NaN = 123
// غير مسموح لمعلمات الوظيفة أن يكون لها نفس الاسم function foo(x,y,x) { console.log(x,y,x)}foo(10,20,30)
var num = 0o123 // Octal var num2 = 0x123 // سداسي عشري console.log(num,num2)
var obj2 = {name:'Tom',age:18,message:'obj2'}غير مسموح به
مع (obj2) { console.log(رسالة) }
var للطبقة العليا strFn = 'var message = "Hello World" console.log(message);'; تقييم (سترفن)في الوضع الصارم
console.log(message)
دالة غير محددة foo() {. console.log(هذا) //غير محدد } فو ()