سؤال

أريد إعلان متغيرات متعددة في وظيفة:

function foo() {
    var src_arr     = new Array();
    var caption_arr = new Array();
    var fav_arr     = new Array();
    var hidden_arr  = new Array();
}

هل هذه هي الطريقة الصحيحة للقيام بذلك؟

var src_arr = caption_arr = fav_arr = hidden_arr = new Array();
هل كانت مفيدة؟

المحلول

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

إذا كنت لا تريد أن يشيروا جميعًا إلى نفس الكائن ، فقم بذلك

var one = [], two = [];

ال [] هو اختصار حرفي لإنشاء صفيف.

إليك سجل وحدة التحكم يشير إلى الفرق:

>> one = two = [];
[]
>> one.push(1)
1
>> one
[1]
>> two
[1]
>> one = [], two = [];
[]
>> one.push(1)
1
>> one
[1]
>> two
[]

في الجزء الأول ، حددت one و two للإشارة إلى نفس الكائن/الصفيف في الذاكرة. إذا استخدمت .push الطريقة التي يدفعها 1 إلى الصفيف ، وهكذا كلاهما one و two لديك 1 داخل. في الثانية منذ أن حددت المصفوفات الفريدة لكل متغير ، عندما دفعت إلى واحد ، لم يتأثر اثنان.

نصائح أخرى

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

في الواقع ، أول واحد فقط سيكون أ إعلان متغير, ، الباقي مجرد مهام على الأرجح المعرفات غير المعلنة!

تعيين قيمة لمعرف غير معلن (ويعرف أيضًا باسم مهمة غير معلنة) يتم إحباطه بشدة لأنه إذا لم يتم العثور على المعرف في سلسلة النطاق ، فسيتم إنشاء متغير عالمي. فمثلا:

function test() {
    // We intend these to be local variables of 'test'.
    var foo = bar = baz = xxx = 5;
    typeof foo; // "number", while inside 'test'.
}
test();

// Testing in the global scope. test's variables no longer exist.
typeof foo; // "undefined", As desired, but,
typeof bar; // "number", BAD!, leaked to the global scope.
typeof baz; // "number"
typeof xxx; // "number"

علاوة على ذلك ، فإن الوضع الصارم 5th eCmascript ، يوضح هذا النوع من الواجبات. ضمن الوضع الصارم ، فإن المهمة المقدمة إلى معرف غير معلن TypeError استثناء ، لمنع الكرات الضمنية.

على النقيض من ذلك ، إليك ما نرى ما إذا كان مكتوبًا بشكل صحيح:

function test() {
    // We correctly declare these to be local variables inside 'test'.
    var foo, bar, baz, xxx;
    foo = bar = baz = xxx = 5;
}
test();

// Testing in the global scope. test's variables no longer exist.
typeof foo; // "undefined"
typeof bar; // "undefined"
typeof baz; // "undefined"
typeof xxx; // "undefined"

لا ، سيقوم بيانك الثاني بإنشاء أربع إشارات إلى نفس الصفيف. انت تريد:

var src_arr     = [],
    caption_arr = [],
    fav_arr     = [],
    hidden_arr  = [];

كل هذه المتغيرات سوف تشير إلى كائن صفيف واحد.

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