1. مساحة الذاكرة في JS مقسمة إلى نوعين: مكدس الذاكرة وذاكرة الكومة
ذاكرة المكدس: يوفر بيئة لتنفيذ رمز JS ؛ يخزن قيم أنواع البيانات الأساسية ؛ -> النطاق العالمي أو النطاق الخاص هي في الواقع ذاكرة مكدس
ذاكرة الكومة: يخزن قيمة نوع البيانات المرجعية (يقوم الكائن بتخزين اسم السمة وقيمة السمة فيه ، وتخزن الوظيفة الرمز في جسم الوظيفة كسلسلة)
2. عندما يقوم المتصفح بتحميل صفحة HTML الخاصة بنا ، سيوفر أولاً بيئة لتنفيذ رمز JS -> النطاق العالمي (Global-> Window)
3. قبل تنفيذ رمز JS ، يحتاج المتصفح إلى القيام ببعض الأشياء في حد ذاته: إعلان أو تحديد جميع الكلمات الرئيسية VAR/Function مقدمًا -> "استكشاف ما قبل" (صوت متغير)
إعلان -> أخبر المتصفح أن لدي شيء من هذا القبيل ، مثل var num1 ؛ وظيفة fn ؛
محدد -> تعيين قيمة للمتغير أو الدالة المعلنة ، على سبيل المثال num1 = 12 ؛ fn = function () {}
[مهمة] المتغيرات تعلن فقط أنها لم يتم تعريفها ، القيمة الافتراضية غير محددة (غير محددة)
4. معالجة VAR والوظيفة تختلف في مرحلة التفسير المسبق.
VAR -> عند إجراء عملية الاستمتاع مسبقًا ، يتم الإعلان عن المتغير مقدمًا. سيتم إكمال عملية المهمة فقط عند تنفيذ الرمز.
الوظيفة -> أثناء التحويل المسبق ، سيتم إكمال جميع الإعلانات والتعاريف مقدمًا (عند تنفيذ الرمز ، سيتم تخطيه مباشرة)
[مهم] في البداية ، يتم تنفيذ التفسيرات المسبقة فقط على النافذة. الأوتار الحالية المخزنة في وظيفة FN كلها سلاسل ، لذلك ليس لدى Var Total معنى عملي ، لذلك لا يتم تنفيذ عمليات التفسير المسبق-> "تحدث التفسيرات المسبقة في النطاق الحالي"
console.log (obj) ؛ //-> غير محدد var obj = {name: "Zhang Shanshan" ، العمر: 10} ؛ الدالة fn (num1 ، num2) {// تخطي مباشرة عند تنفيذ الكود على هذا السطر ، لأنه خلال فترة الاستكشاف المسبق ، أكملنا الإعلان والتعريف var total = num1 + num2 ؛ console.log (المجموع) ؛ } var num1 = 12 ؛ fn (num1 ، 100) ؛ // تنفيذ fn ، تعيين قيمة المتغير العالمي num1 إلى المعلمة num1 ، وتعيين 100 للمعلمة num25. المتغير المعلن تحت النطاق العالمي هو متغير عالمي
المتغيرات المعلنة في النطاق الخاص هي متغيرات خاصة. المعلمات الرسمية للوظيفة هي أيضا متغيرات خاصة.
كيف تعرف ما إذا كانت المتغيرات التي تظهر في وظيفة خاصة أم عالمية؟
أولاً ، تعرف على ما إذا كانت معلمة رسمية ، ثم تعرف على ما إذا كان قد تم الإعلان عنه في النطاق الخاص (كان لديه). واحد من الاثنين هو متغير خاص. ثم بغض النظر عن المكان الذي يظهر فيه في الوظيفة الحالية ، فهو خاص ، ولا توجد علاقة بينها وبين العلماء ؛ إذا لم يكن كذلك ، فهذا يعني أنه ليس خاصًا ، فابحث عن النطاق السابق ...
6. عند تنفيذ الوظيفة ، سيتم تشكيل نطاق خاص جديد (ذاكرة المكدس) للرمز في هيئة الوظيفة التي يتم تنفيذها ؛
1) تعيين القيمة للمعلمات الرسمية
2) التفسير المسبق تحت النطاق الخاص
3) تنفيذ الكود ضمن النطاق الخاص
يحمي النطاق الخاص الجديد الذي تم تشكيله أيضًا المتغيرات الخاصة من داخل التأثيرات الخارجية. نضع آلية الحماية هذه للوظيفة -> "الإغلاق
الفرق: يمكن الإعلان عن أولئك الذين لديهم VAR قبل تنفيذ الكود ، في حين لا يمكن الإعلان عن أولئك الذين ليس لديهم VAR مقدمًا
1. ما قبل الانفصال مطلوب بغض النظر عما إذا كانت الشروط صحيحة أم لا.
النافذة قبل الانتقالات: var a ؛ -> Window.A ؛ if (! ("a" in window)) {// "a" in window -> true var a = "us" ؛ } console.log (a) ؛ //-> غير محدد2. يحدث التفسير المسبق فقط على الجانب الأيسر من "=" ، فقط الجانب الأيسر هو التفسير المسبق ، والجانب الأيمن هو القيمة دون تفسير ما قبل.
تعبير الوظيفة للوظائف المجهولة: قم بتعيين جزء من تعريف الوظيفة كقيمة لحدث متغير أو عنصر.
عند الانفصال: var fn ؛ -> القيمة الافتراضية لـ FN غير محددة
fn () ؛ //-> undefined () undecterror: fn ليست وظيفة يمكن تنفيذ وظائف فقط في JS && إذا تم الإبلاغ عن الكود أعلاه JS ، فإن الكود أدناه لا يتم تنفيذها دون أي معالجة خاصة var fn = function () {console.log ("ok") ؛ } ؛ fn () ؛ عند الانتهاء المسبق: fn = xxxfff000 fn () ؛ //-> "ok" function fn () {console.log ("ok") ؛ } fn () ؛ //-> "ok" function fn () {console.log ("ok") ؛ } fn () ؛ //-> "موافق"3. لم يعد الرمز الموجود أسفل العائد في هيئة الوظيفة قد تم تنفيذه ، لكن الرمز أدناه يحتاج إلى المشاركة في ما قبل الانفصال ؛ والأشياء التي تقف وراء العائد يجب معالجتها ، ولكن نظرًا لأنه يتم إرجاعها كقيمة ، لا يتم تنفيذ ما قبل التحويل ؛
إجمالي var = 300 ؛ دالة fn () {console.log (المجموع) ؛ إرجاع وظيفة SUM () {} ؛ // الإرجاع هو إرجاع القيمة في الوظيفة إلى الخارج من الوظيفة ، والتي تُرجع عنوان الذاكرة المقابل للوظيفة إلى الخارج من الوظيفة ، على سبيل المثال: إرجاع xxxfff111 ؛ الرمز أدناه عائد في هيئة الوظيفة لا ينفذ VAR Total = 10 ؛ } fn () ؛4. وظيفة الوظيفة المجهولة لا يتم استكشافها مسبقًا بموجب النطاق العالمي.
وظيفة التنفيذ الذاتي للوظيفة المجهولة: يتم الانتهاء من التعريف والتنفيذ معًا
(وظيفة (num) {}) (100) ؛
5. عند الانفصال المسبق ، إذا تم تكرار الاسم ، فسيتم إعلانه مرة واحدة فقط ولم يتكرر ، ولكن لا يزال يتم تكرار المهمة.
إذا كان اسم المتغير واسم دالة هو نفسه اسم وظيفة في JS ، فسيتم تكراره
ما قبل الانفصال:
var fn ؛ إعلان fn = xxxfff000 ؛ [إعلان] لا + تحديد fn = xxxfff111 ؛ [إعلان] لا + تعريف -> fn = xxxfff111 var fn = 12 ؛ // window.fn = 12 function fn () {//window.fn=function () {}} functما ورد أعلاه هو كل التفاهمات ذات الصلة حول js قبل الاستمتاع التي قدمها لك المحرر. أتمنى أن تدعم wulin.com أكثر ~