القراء مثلك يساعدون في دعم MUO. عند إجراء عملية شراء باستخدام الروابط الموجودة على موقعنا ، فقد نربح عمولة تابعة.

الرفع هو آلية جافا سكريبت تتيح لك الوصول إلى المتغيرات والوظائف قبل تهيئتها. إن رفع مثل هذا الإعلان ينقله بشكل فعال إلى قمة نطاقه.

تعرف على كل شيء حول كيفية عمل الرفع في JavaScript وكيفية إدارته بشكل أفضل لتجنب الأخطاء في التعليمات البرمجية الخاصة بك.

رفع المتغيرات مع var و let و const

الرفع ممكن لأن JavaScript يستخدم نظام التجميع JIT (Just-in-Time) ، والذي يقوم بمسح الكود الخاص بك لتحديد جميع المتغيرات في نطاقاتها الخاصة.

ثم يقوم مترجم JIT برفع جميع حالات التصريحات المتغيرة إلى أعلى نطاقها عند التحويل البرمجي. يرفع JavaScript فقط إعلانات المتغيرات ، وليس عمليات التهيئة الخاصة بها.

يعتمد سلوك المتغيرات ، عند رفعها ، على الكلمة الرئيسية التي تحددها بها ، حيث تتصرف كل كلمة رئيسية بشكل مختلف.

فار

الوصول إلى متغير غير مهيأ معلن عنه بامتداد فار الكلمة الرئيسية ستعود غير معرف. على سبيل المثال:

وحدة التحكم.log (foo) ؛ // غير معرف
فار فو = 2;

سجلات التعليمات البرمجية أعلاه غير معرف لأنه يدعو وحدة التحكم قبل أن يقوم بتهيئة المتغير.

instagram viewer

يعرض مترجم JavaScript كتلة التعليمات البرمجية السابقة كما يلي:

فار فو.
وحدة التحكم.log (foo) ؛ // غير معرف
فو = 2 ؛

أثناء الرفع ، تخضع المتغيرات لـ قواعد تحديد نطاق جافا سكريبت. Javascript سوف ترفع متغيرًا فقط إلى أعلى النطاق الذي أعلنته فيه. ستؤدي محاولة تسجيل قيمة متغير خارج النطاق المعلن إلى أ المرجع خطأ. على سبيل المثال ، إذا قمت بتعريف متغير داخل دالة ، فلن يكون مرئيًا خارج هذا النطاق:

وظيفةوظيفتي() {
وحدة التحكم.log (foo) ؛ // غير معرف
فار فو = 10;
}

myFunction () ؛
وحدة التحكم.log (foo) ؛ // ReferenceError: لم يتم تعريف foo

ستؤدي محاولة الوصول إلى متغير خارج نطاقه إلى أ المرجع خطأ.

اسمحوا و const

بحسب ال MDN التوثيق على يترك و مقدار ثابت الرفع, ترفع JavaScript أيضًا المتغيرات المُعلنة بامتداد يترك و مقدار ثابت الكلمات الدالة. ومع ذلك ، على عكس المتغيرات المعلنة مع فار الكلمة الأساسية ، لم يتم تهيئتها باستخدام غير معرف قيمة.

على سبيل المثال:

وظيفةوظيفتي() {
وحدة التحكم.log (foo) ؛ // غير معرف
وحدة التحكم.log (شريط) ؛ // ReferenceError: لا يمكن الوصول إلى 'bar' قبل التهيئة
وحدة التحكم.log (باز) ؛ // ReferenceError: لا يمكن الوصول إلى 'baz' قبل التهيئة

فار فو = 5;
يترك شريط = 10;
مقدار ثابت باز = 15;
}

myFunction () ؛

لا يمكنك الوصول إلى المتغيرات المُعلنة بالكلمات الأساسية let و const قبل تهيئتها بقيمة.

وظائف الرفع

تعمل روافع JavaScript بشكل مشابه للمتغيرات. كما هو الحال مع المتغيرات ، يعتمد الأمر على كيفية تعريفك لهم. على سبيل المثال ، تعمل JavaScript على رفع إعلانات الوظائف بشكل مختلف عن تعبيرات الوظائف.

إعلان الوظيفة هو وظيفة معلنة باسم ، بينما تعبير الدالة هو وظيفة يمكنك حذف اسمها. على سبيل المثال:

وظيفةفو() {
// إعلان الوظيفة
}

مقدار ثابت شريط = () => {
// تعبير وظيفي
}

رافعات جافا سكريبت وظيفية الإعلانات ولكن ليس التعبيرات الوظيفية. على سبيل المثال:

foo () ؛ // 5
حاجِز()؛ // TypeError: bar () ليس دالة

// إعلان الوظيفة
وظيفةفو() {
وحدة التحكم.سجل(5);
}

// التعبير عن الوظيفة
فار شريط = وظيفةتعبير() {
وحدة التحكم.سجل(10);
};

هذا الرمز يدعو فو قبل إعلانها وتهيئتها كوظيفة ، لكنها لا تزال تسجل 5 إلى وحدة التحكم. ومع ذلك ، تحاول الاتصال حاجِز النتائج في خطأ مطبعي.

إدارة الرفع

إن إدراكك للرفع والأخطاء المحتملة التي يمكن أن تحدث إذا تمت إدارتها بشكل خاطئ يمكن أن يوفر لك ساعات طويلة من تصحيح الأخطاء. فيما يلي بعض الطرق التي يمكنك من خلالها إدارة الرفع.

قم بتعريف المتغيرات داخل الوظائف

قم بتعريف المتغيرات داخل الوظائف التي ستصل إليها. لن تتمكن دائمًا من القيام بذلك ، فقد تحتاج إلى متغير عام يمكنك الوصول إليه من خلال وظائف متعددة. لذا تأكد من أنك تعلن عن المتغيرات عالميًا فقط إذا كنت بحاجة فعلاً إلى ذلك.

قم بتعريف المتغيرات باستخدام let أو const

يجب عليك دائمًا استخدام حرف lوآخرون وجonst الكلمات الرئيسية بدلا من فار الكلمة الأساسية عند التصريح عن المتغيرات. هذه الممارسة مفيدة عند التصريح عن المتغيرات المحلية داخل دالة. معرفة الطرق الصحيحة ل أعلن عن المتغيرات في جافا سكريبت يقلل من فرص الأخطاء الناتجة عن الرفع التي تحدث في التعليمات البرمجية الخاصة بك.

قم بتعريف المتغيرات في أعلى نطاقها

قم بتعريف جميع المتغيرات الخاصة بك في الجزء العلوي من النطاقات الخاصة بكل منها ، قبل أي عبارات أخرى. سيؤدي القيام بذلك إلى ضمان ألا يضطر برنامج التحويل البرمجي لـ JavaScript إلى رفع هذه المتغيرات للوصول إليها.

باستخدام الوضع الصارم

الوضع الصارم هو وضع جافا سكريبت الذي ينظم بناء الجملة الضعيف ، ويحسن وقت تشغيل التعليمات البرمجية الخاصة بك ، ويمنع إساءة استخدام صياغة JavaScript المكتوبة بشكل فضفاض عن طريق إلقاء الأخطاء في وقت الترجمة.

على سبيل المثال ، في "الوضع القذر" بسبب الرفع ، يمكنك الوصول إلى متغير خارج الوظيفة التي تمت تهيئتها ، على الرغم من عدم الإعلان عنها:

myFunction () ؛
وحدة التحكم.log (foo) ؛ // 20

وظيفةوظيفتي() {
foo = 20 ؛
}

في كتلة التعليمات البرمجية أعلاه ، تعلن JavaScript تلقائيًا فو ويرفعه إلى أعلى النطاق العالمي ، متجاهلاً النطاق الذي قمت بتهيئته فيه.

يمكنك استخدام الوضع المتشدد لإصلاح هذا السلوك وإلقاء خطأ إذا حاولت الوصول إلى المتغير خارج نطاق وظيفته.

لا يتوقف الوضع الصارم عن الرفع تمامًا. بدلاً من ذلك ، فإنه يمنع أشكال الرفع الأكثر إرباكًا وعرضة للخطأ. لا يزال من المهم فهم المفهوم العام والقواعد الكامنة وراء الرفع ، حتى عند استخدام شبكة أمان الوضع الصارم.

للاشتراك في الوضع المتشدد على المستوى العام ، قم بتعريف بناء الجملة في الجزء العلوي من ملف البرنامج النصي الخاص بك:

"يستخدمحازم"; // أو 'يستخدمحازم'

للاشتراك في الوضع المتشدد على مستوى وظيفي ، أعلن عن الصيغة في الجزء العلوي من جسم الوظيفة قبل أي عبارات:

وظيفةوظيفة myStrictFunction() {
"يستخدمحازم";
}

إذا قمت بتعريف الوضع المتشدد على مستوى الوظيفة ، فسيتم تطبيق الإعداد فقط على العبارات الموجودة داخل تلك الوظيفة.

يؤدي إعلان الوضع المتشدد على المستوى العام إلى منع الوصول إلى المتغيرات خارج النطاقات الخاصة بها:

"يستخدمحازم";
myFunction () ؛
وحدة التحكم.log (foo) ؛ // ReferenceError: لم يتم تعريف foo

وظيفةوظيفتي() {
foo = 20 ؛
}

مع تشغيل الوضع المتشدد ، سيرفع مترجم JavaScript myFunction () إلى الجزء العلوي من نطاقها بدون المتغير غير المعلن.

افهم ما الذي يؤثر على الرفع

يعد الرفع أمرًا فريدًا تمامًا بالنسبة لجافا سكريبت ويمكن أن يكون سلوكًا محيرًا للغاية للالتفاف حوله. يمكن أن يؤثر على المتغيرات والوظائف ، ولكن هناك طرق لمنعه إذا كنت بحاجة إلى ذلك.

يمكن أن تؤثر عدة عوامل على الرفع ، لذلك من الأفضل تجنب حدوث أي متغير أو رفع وظيفي في التعليمات البرمجية الخاصة بك.