سؤال

غالبًا ما أرى كائنًا عالميًا محدد في رمز JavaScript ليكون بمثابة مساحة اسم.

var MyNS = {a: function() {}, ... };

لكن في بعض الأحيان ، أرى أن الناس يتركون الكلمة الرئيسية "var" مثل

MyNS = {a: function() {}, ...};

أؤمن بمتصفحات الويب إذا لم تحدد متغيرًا مع VAR ، فسيتم وضعه في كائن النافذة ، والذي يعمل كمساحة اسم عالمية. نظرًا لأنه يحفظ بعض بايت النص من خلال عدم استخدام "var" هل هناك سبب لاستخدام الكلمة الرئيسية لهذا الغرض المحدد ?

هل كانت مفيدة؟

المحلول

نظرًا لأنه يحفظ بعض بايت النص من خلال عدم استخدام "var" هل هناك سبب لاستخدام الكلمة الرئيسية لهذا الغرض المحدد؟

لا أوصيك بتجنب var الكلمة الرئيسية ، حتى لو كنت على رمز عالمي.

يبدو أن الطريقتين متشابهتين ولكنهما في الواقع ليسا متماثلين ، الأول هو أ إعلان متغير, ، ال كائن متغير على الكود العالمي ، هو الكائن العالمي نفسه ، ولهذا السبب يمكن الوصول إلى المتغيرات العالمية كخصائص للكائن العالمي (window.MyNS).

والثاني هو مهمة غير معلنة, ، ينشئ خاصية على الكائن العالمي إذا لم يتم العثور على المعرف في سلسلة النطاق.

سبب حقيقي لتجنب ذلك هو أنه في المعيار الجديد للغة ، الطبعة الخامسة ECMASCRIPT ، تحت الوضع الصارم, ، ستعمل مهمة على معرف غير معلن ReferenceError كسر الكود الخاص بك.

هناك أيضًا فرق آخر دقيق بين المثالين ، فإن التثبيت المتغير ينشئ الخاصية على الكائن العالمي غير قابل للتحرير:

var myVar = '';
delete window.myVar; // false
typeof window.myVar; // 'string'

في حين أن المهمة غير المعلنة لا:

myProp = '';
delete window.myProp; // true
typeof window.myProp; // 'undefined'

المقالة الموصى بها:

نصائح أخرى

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

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

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

لكن لا ، هذا ليس ضروريًا تمامًا.

تعديل - eyelidnes لها نقطة جيدة حقًا ، على الرغم من أنك إذا كنت تكتب رمزًا على المستوى العالمي ، فهذا ليس مشكلة بالفعل.

نمط مقاوم للرصاص إلى حد ما رأيته هو تهيئة مساحات الأسماء العالمية مع شيء مثل هذا:

(function(window, undefined) {

  var foo = { stuff: "in my namespace", ... };

  window.foo = foo;
})(this);

على المستوى العالمي ، this سيكون كائن النافذة (إذا كنت في متصفح ؛ إذا لم يكن الأمر كذلك ، فهذا أي شيء هو الكائن العالمي في هذا السياق).

دوغلاس كروكفورد حول هذا السؤال الدقيق:http://www.yuiblog.com/blog/2008/04/16/global-domination-bart-two/

يستقر على استخدام تعليق مع التهيئة ، ولكن بدون var. إن تحليله للمقايضات يستحق القراءة حتى لو كنت لا توافق.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top