اذهب إلى المحتوى

السؤال

نشر

لقد لاحظت في العديد من المشاريع كتابة الجملة "use strict" في أول ملفات الجافاسكريبت التابعة ل node.js

ما الذي تقوم به هذه الجملة بالتحديد؟ وهل يمكن وضعها في أماكن أخرى غير السطر الأول من ملف الجافاسكريبت؟

Recommended Posts

  • 1
نشر

لقد تم إحداث هذه الخاصية في ECMAScript النسخة الخامسة. ويتم إهمالها من قبل النسخ القديمة من الجافاسكريبت.

ومن إحدى أهم مزاياها هو أنك لا تستطيع استخدام المتغيّرات التي لم يتم التصريح عنها، ولعلّها تساعد المبرمجين بعدم ارتكاب بعض الأخطاء وتسهّل الوصول إلى الأخطاء عند حدوثها.

مثال:

"use strict";
x = 3.14; // سيسبب خطأ لأنه لم يتم التصريح مسبقاً عن المتغيّر


يجب أن تكون بالشكل التالي:
"use strict";
let x = 3.14;

في الوضع غير المقيد (أي عند عدم وضع use strict) ، ستكون المتغيرات والتي يمكن الوصول إليها داخل أي دالة عبارة عن مصفوفة مثل الكائن Object على سبيل المثال والذي يحتوي على جميع المعاملات التي يتم تمريرها له عادةً، ستكون هذه المعاملات الموجودة داخلها مراجع إلى نفس القيم المخزنة في تعريف الوظيفة.

مثلاً عند تعريف دالة ما تحوي بارامتر واحد وليكن اسمه myArg، سنتمكّن من الوصول إلى هذا المتغير إما من خلال اسمه muArg أو من خلال المصفوفة arguments[0] وعندما نقوم بتغيّر قيمته من خلال هذه المصفوفة ستقوم أيضاً بتغيير قيمته التابعة للاسم نفسه:

function myFunc(myArg) {  
  console.log(`${myArg} -- ${arguments[0]}`);  
  arguments[0] = 20;  // نقوم هنا بتغيير قيمته من خلال مصفوفة المتغيرات
  console.log(`${myArg} -- ${arguments[0]}`);  
}  
  
test(10);

سنلاحظ هنا أن النتيجة نفسها لكل من مصفوفة المتغيّرات، وأيضاً اسم المتغيّر أو reference:

10 -- 10
20 -- 20

أما إذا قمنا بكتابة use strict وأعدنا تنفيذ هذا التابع:

    'use strict';  // قمنا هنا بإضافة use strict

    function myFunc(myArg) {  
      console.log(`${myArg} -- ${arguments[0]}`);  
      arguments[0] = 20;  
      console.log(`${myArg} -- ${arguments[0]}`);  
    }  
      
    test(10);  

سنلاحظ أنه حتى لو غيّرنا قيمة المتغيّر من خلال المصفوفة، فإن ذلك لن يؤثر فعلياً على قيمة المتغيّر نفسه المحجوز في الذاكرة. وعندما نقوم باستدعائه من خلال اسم المتغيّر أو reference سنلاحظ أن قيمته لم تتغيّر واحتفظت بالقيمة نفسها، فيكون الناتج:

10 -- 10
10 -- 20
^^

 

  • 0
نشر (معدل)

تعتبر ال "use strict" من الإضافات القوية للغة حيث تمنع المطورين من الوقوع في الأخطاء وتعمل أيضاً بكشف الأخطاء ال silent التي لا يمكن إكتشافها فتقوم بمنع الأخطاء التالية

  • تمنع تكرار ال keys في الكائنات
    var zombie = {
        eyeLeft : 0,
        eyeRight: 1,
    }

     

  • تمنع تعريف المتغير بدون var وما إلى ذلك
    Y = 5;

     

  • تمنع تكرار ال arguments
    function run(fromWhom, fromWhom){}

     

أيضاً يقوم الوضع strict بتحسين الأداء الخاص بالبرنامج أو الكود مثلاً عن طريق عمل throw لل silent errors أيضاً يقوم بإصلاح بعض الأخطاء التي تمنع محرك v8 من عمل optimization 

تم التعديل في بواسطة عبدالباسط ابراهيم
إضافة الكود

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...