على عكس لغات البرمجة مثل C و Java ، فإن المتغيرات في JavaScript لا توجد نوع ، وجميع التعريفات المتغيرة تستخدم الكلمات الرئيسية Var:
نسخة الكود كما يلي:
var a ؛
var m ، n ؛
var x = 42 ، y = "test" ؛
إذا لم يتم تعيين قيمة المتغير بعد تحديدها ، فإن قيمة المتغير غير محددة. على سبيل المثال ، لا يتم تعريف قيم المتغيرات الثلاثة A و M و N في الكود أعلاه.
نظرًا لأن المتغيرات في JS لا توجد نوع ، فمن الممكن تعيين أنواع مختلفة من القيم لنفس المتغير ، مثل:
نسخة الكود كما يلي:
var b = "temp" ؛
console.log (typeof b) ؛ // string
ب = 108 ؛
console.log (typeof b) ؛ // number
بالإضافة إلى أنواع مختلفة من الواجبات لنفس المتغير ، يمكن أيضًا تحديد المتغيرات مرارًا وتكرارًا في JavaScript ؛ إذا تم ذلك ، فإن عبارة التعريف المتغير بعد المرة الأولى تعادل بيان المهمة:
نسخة الكود كما يلي:
var c = "hello" ؛
console.log (c) ؛ // hello
var c = true ؛
console.log (c) ؛ // true
ضمن الوضع الصارم لمعيار ECMAScript ، تتطلب جميع التعريفات المتغيرة استخدام الكلمة الرئيسية VAR. إذا لم يتم استخدام الوضع الصارم ، عندما يقوم برنامج JS بتعيين قيمة لمتغير غير محدد ، سيقوم البرنامج بإنشاء خاصية في كائن JS Global بنفس الاسم مثل المتغير ، أي إنشاء متغير عالمي جديد. سيؤدي هذا النهج إلى العديد من المشكلات (مثل التلوث المتغير العالمي بين برامج JS المتعددة ، وما إلى ذلك) ، مما سيؤدي إلى مشكلة كبيرة في الصيانة لاحقًا ؛ لذلك ، في عملية التطوير الفعلية ، ينبغي تجنب هذا النهج قدر الإمكان.
تخزين المتغيرات
إذا كان المتغير المحدد هو متغير عالمي ولم يتم استخدام الكلمة الرئيسية VAR أثناء عملية التعريف المتغير ، فسيوجد المتغير كخاصية للكائن العالمي. يمكن الحصول عليها عن طريق الوصول إلى الخصائص المقابلة لهذا (الكائن العالمي) ، أو يمكن حذفها من الكائن العالمي باستخدام الكلمة الرئيسية حذف:
نسخة الكود كما يلي:
var e = "GlobalVariableValue" ؛ // تعريف خارج أي وظيفة ، فهو متغير عالمي ، لكنه لا يخزن في "هذا"
f = "GlobalVariableValue2" ؛
this.g = "GlobalVariableValue3" ؛
console.log (this.e) ؛ // undefined
console.log (this.f) ؛ // GlobalVariableValue2
console.log (this.g) ؛ // GlobalVariableValue3
حذف F ؛
حذف ز ؛
console.log (this.f) ؛ // undefined
console.log (this.g) ؛ // غير محدد
لكل مكالمة دالة في JavaScript ، ستقوم JavaScript بإنشاء كائن محلي لتخزين المتغيرات المحلية المحددة في الوظيفة ؛ إذا كانت هناك وظيفة متداخلة داخل الوظيفة ، فسيحدد JavaScript كائنًا محليًا متداخلًا داخل الكائن المحلي المحدد بالفعل. بالنسبة للوظيفة ، هناك العديد من طبقات تعريفات الوظائف المتداخلة كما توجد ، مثل العديد من طبقات الأشياء المحلية المتداخلة. يسمى هذا الكائن المحلي "كائن استدعاء الوظيفة" ("كائن الاتصال" في ECMASCRIPT 3 ، وتم إعادة تسميته "سجل البيئة التعريفي" في ECMASCRIPT 5 ، لكنني شخصياً أعتقد أن الاسم في ECMASCRIPT 3 أسهل في الفهم).
على عكس الكائنات العالمية ، لا توفر JavaScript أي طريقة للوصول إلى هذه الكائنات المحلية (كائنات استدعاء الوظائف). لذلك ، لا يمكن للمطورين العمل على هذه الأشياء المحلية. ومع ذلك ، فإن فهم كائنات استدعاء الوظائف هذه سيكون مساعدة كبيرة لفهم بعض المفاهيم في JavaScript ، مثل نطاق وإغلاق المتغيرات.