نطاق جافا سكريبت

تعرف على أساسيات JavaScript Scope

النطاق هو مجموعة القواعد المحددة في لغة البرمجة لتحديد قيمة المتغير.

يستخدم JavaScriptالنطاق المعجمي، مما يعني أن قيمة المتغير تحدد من خلال موضعه عند كتابته ليس عندما يتم استدعاؤها ، وهو أمر يحدث مع البديل ،تحديد النطاق الديناميكي.

النطاق هو مجموعة المتغيرات المرئية لجزء من البرنامج.

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

هناك فرق مهم جدا بينvarوletوconstالإعلانات.

متغير يعرف بvarداخل دالة يكون مرئيًا فقط داخل تلك الوظيفة. تمامًا مثل معلمات الوظيفة.

متغير يعرف بconstأوletمن ناحية أخرى ، تكون مرئية فقط داخل تلك الكتلة حيث توجد.

من المهم أن نفهم أن الكتلة (المحددة بواسطة زوج من الأقواس المتعرجة) لا تحدد نطاقًا جديدًا لهاvar، لكنها تعمل من أجلletوconst. نطاق جديد لvarيتم إنشاؤه فقط عندما يتم إنشاء وظيفة ، لأنvarليس لديها نطاق كتلة ، ولكن نطاق وظيفة.

داخل دالة ، أيvarالمتغير المحدد فيه مرئي في جميع كود الوظيفة ، حتى لو تم الإعلان عن المتغير في نهاية الوظيفة ، فلا يزال من الممكن الإشارة إليه في البداية ، لأن JavaScript قبل تنفيذ الكود فعليًاينقل جميع الإعلانات المتغيرة في الأعلى(شيء يسمىالرفع). لتجنب الالتباس ، أعلن دائمًاvarالمتغيرات في بداية الدالة.

هذا ما اعنيه. حتى لو قمت بتصريح ملفvarمتغير في نهاية دالة ، يتم نقل إعلانها إلى الأعلى:

function run() {
  console.log(`${name}`)
  var name = 'Flavio'
}

run()

هذا يطبع "غير محدد" لأن ما يحدث في الواقع هو

function run() {
  var name;
  console.log(`${name}`)
  name = 'Flavio'
}

run()

letوconstلا "تعاني" من الرفع. إذا كنت تستخدم واحدًا منهم في المثال أعلاه ، فستتلقى خطأ:ReferenceError: name is not defined.

في JavaScript ، يتم توفير متغيرات الوظيفة الرئيسية للوظائف الداخلية أيضًا. يشمل نطاق الوظيفة الداخلية أيضًا نطاق الوظيفة الرئيسية ، وهذا ما يسمى الإغلاق (سنتحدث بشكل مكثف حول هذا لاحقًا).

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

تذكر: أي متغير محدد في دالة (أو كتلة) يحمل نفس اسم المتغير العام له الأسبقية على المتغير العام ، ويظللها.

هذا يطبعundefined:

var name = 'Roger'

function run() { console.log(</span><span style="color:#e6db74">${</span><span style="color:#a6e22e">name</span><span style="color:#e6db74">}</span><span style="color:#e6db74">) var name = ‘Flavio’ }

run()

وهذا يثير خطأReferenceError: name is not defined:

let name = 'Roger'

function run() { console.log(</span><span style="color:#e6db74">${</span><span style="color:#a6e22e">name</span><span style="color:#e6db74">}</span><span style="color:#e6db74">) let name = ‘Flavio’ }

run()


المزيد من دروس js: