والغرض من ذلك هو أنه إذا تم الإعلان عن متغير غير مُعين ، فيمكن تعيينه مباشرة ؛
إذا لم يعلن ، Redeclare.
لقد بحثت عبر الإنترنت ووجدت أن الطريقة الشائعة هي إذا (typeof (a) == 'undefined') {var a = 'ss' ؛} ،
ومع ذلك ، ستعود هذه الطريقة بشكل صحيح للمتغيرات غير المعلنة أو غير المعينة. وإذا كان الأمر كذلك:
نسخة الكود كما يلي:
var a ؛
وظيفة f () {
إذا (typeof (a) == 'undefined')
{var a = 1 ؛}
}
f () ؛
console.log (a) ؛
سيتم عرض Undefined لأن F () تعلن فقط عن متغير محلي بنفس الاسم.
ومع ذلك ، إذا كان هناك متغير تم الإعلان عنه غير المعين: إذا (novaluev == null) ، فسيعود صحيح ؛
متغير غير معلم: if (nodeClarev == NULL) ، سيتم الإبلاغ عن خطأ.
لذلك يمكن أن يكون:
نسخة الكود كما يلي:
وظيفة f () {
if (typeof (v) == 'undefined') {
يحاول{
إذا (V == NULL) // أشير إلى أن V تم الإعلان عنه غير المعين
v = 1 ؛ إذا كان V متغيرًا عالميًا ، فلن يغير نطاقه
}
catch (err) {// تشير إلى أنه لم يتم الإعلان عن v
var v ؛ v = 2 ؛
}
}
console.log (v) ؛
}
f () ؛
هذا خطأ أيضًا ، لأن JS لديه خاصية "إعلان التقدم" ، أي أن المتغيرات المعلنة في الوظيفة مرئية في هذه الوظيفة وفي الوظيفة الفرعية لهذه الوظيفة ، بغض النظر عن المكان الذي يتم فيه إعلانها في الوظيفة.
لذلك بسبب VAR V ؛ على أي حال ، تحاول فقط.
تعديله:
نسخة الكود كما يلي:
وظيفة f () {
if (typeof (v) == 'undefined') {
يحاول{
إذا (V == NULL) // أشير إلى أن V تم الإعلان عنه غير المعين
v = 1 ؛ إذا كان V متغيرًا عالميًا ، فلن يغير نطاقه
}
catch (err) {// تشير إلى أنه لم يتم الإعلان عن v
eval ('var v') ؛ v = 2 ؛
}
}
console.log (v) ؛
}
f () ؛
هذا كل شيء.
من المكتوبة كدالة للحكم ، يعني إرجاع "NodeClare" أنه لم يتم الإعلان عن المتغير ، "Novalue" يعني أنه تم الإعلان عن المتغير غير المعين ، و "Hasvalue" يعني أن المتغير قد تم تعيينه:
نسخة الكود كما يلي:
وظيفة F (V) {
if (typeof (v) == 'undefined') {
يحاول{
إذا (v == null)
إرجاع "Novalue" ؛
}
catch (err) {
إرجاع 'nodeclare' ؛
}
}
عودة أخرى "Hasvalue" ؛
}
var a ؛
console.log (f (a)) ؛
أ = 0 ؛
console.log (f (a)) ؛
console.log (f (b)) ؛
من الخطأ مرة أخرى ..... سيكون هناك خطأ عند console.log (f (b)) ؛ ...