نسخة الكود كما يلي:
a = new array () ؛
ب = صفيف جديد (125624) ؛
A.push.apply (a ، b) ؛
الرمز أعلاه يلقي الاستثناء التالي ضمن MAC chrome
نسخة الكود كما يلي:
Rangeerror غير المقتنيات: تجاوز حجم مكدس المكالمات القصوى
إذا قمت بتغيير الصفيف إلى B = صفيف جديد (125623) ؛ سيكون من الرائع أن يكون لديك عنصر أصغر. لقد اختبرت أن المتصفحات الأخرى لديها أيضًا مشاكل في المصفوفات الكبيرة ، لكن القيم الحرجة للمتصفحات المختلفة لا تزال مختلفة.
لقد بحثت في http://stackoverflow.com/questions/1374126/how-to-append-an-array-to-an-existing-javascript-array/17368101#17368101 ووجد أن شخصًا ما واجه مثل هذا المقاومة:
نسخة الكود كما يلي:
Array.Prototype.Extend = function (other_array) {
/ * يجب أن تتضمن اختبارًا للتحقق مما إذا كان other_array حقًا عبارة عن صفيف */
other_array.foreach (function (v) {this.push (v)} ، this) ؛
}
إن الاقتراحات المقدمة هي أن تكون صادقًا وعمليًا ، والتي لا يمكن أن تتجنب فقط مشاكل استثناء المصفوفات الكبيرة ، ولكن أيضًا النظر في أداء Foreach باعتباره الأسرع
أعطتني هذه الحفرة الصغيرة أفكارًا:
1. بعض الاستخدامات الفاخرة مثل a.push.apply (a ، b) ؛ يكفي استخدامها للظهور عند أسئلة المقابلة. في الممارسة العملية ، من الأفضل أن تأخذ الطريق الصادق لتجنب مواجهة التشوهات ومزالق الأداء. على سبيل المثال ، هناك عدد صغير من طوبولوجيا الشبكة ثلاثية الأبعاد من أمثلة تخطيط الربيع مع العشرات من العقد في هذه المقالة على ما يرام. فقط عندما تواجه أحجام بيانات كبيرة حقيقية ، مثل HT لأمثلة أداء الويب في هذه المقالة ، يمكنك اختبار المشكلة.
2. الحقيقة غالبا ما تكون في أيدي عدد قليل من الناس. الإجابة بـ 259 صوتًا في الشكل أدناه هي حفرة ، و 34 صوتًا هي التحليل الأكثر مثالية: