scope فى الجافاسكربت


السلام عليكم و رحمه الله تعالى و بركاته

ال scope هو المدى الذى يكون خلاله المتغير ظاهر و يمكن التعامل معه ، جافاسكربت تحتوى على global scope و function scope فقط و لا تحتوى على block scope مثل اللغات المتقدمه مثل ال JAVA ، قد يبدو هذا عيبا لكنه ميزه فى نفس الوقت و سوف يتضح هذا من خلال الشرح .

أى متغير يتم تعريفه خارج ال function فإنه يكون فى ال global scope بمعنى انه يمكن التعامل معه من أى منطقه فى السكربت ، و ينصح الكثير من خبراء الجافاسكربت بحمايه المتغيرات و عدم جعلها فى ال global scope عن طريق إخفائها بعده طريق سوف أشرحها لاحقا ، و أى متغير يتم تعريفه داخل ال function فإنه يتم إخفائه من ال global scope و الكود بداخل ال function هو فقط الذى يستطيع الإشاره إليه و التعامل معه ، اما المتغيرات التى يتم تعريفها داخل اى block مثل if او for او while فإنها تكون أيضا ضمن متغيرات ال global scope كما يوضح الكود التالى :

var x = "iam not alone"; // global scope
if ( true ){
    var x = "you can"; // modify x on global scope
}
alert(x); // you can
function mm(){
    var x = "iam unique"; // function scope
}
mm(); // execute the function
alert(x); // you can

فى المثال السابق أنشأت متغير بإسم x فى ال global scope و أعطيته القيمه iam not alone ، ثم داخل if block قمت بإعطاء المتغير x القيمه you can ، و بما إن javascript لا تدعم ال block scope فإن x داخل ال if block سوف تعدل قيمه x التى فى ال global scope و ستصبح قيمتها iam unique ، و أخيرا داخل ال  function قمت بإنشاء متغير بنفس الإسم x و أعطيته القيمه iam unique لكن هذه القيمه لن تعدل على قيمه x فى ال global scope لأن جافاسكربت تدعم ال function scope ، و لذلك بعد تنفيذ الوظيفه فإن قيمه x لاتزال كما هى iam unique ، لو مش فاهم اقرأ الفقره تانى .

فى المثال السابق المتغيرات كلها تم تغييرها ب var ، لكن ماذا يحدث لو لم يعرف المتغير بكلمه var ؟
لن يحدث شىء للمتغيرات التى فى ال global scope او المتغيرات التى يتم تعريفها داخل ال block مثل if او while … الخ ، لكن اذا لم يعرف المتغير داخل ال function بواسطه var فإنه سنتقل من ال function scope إلى ال global scope ، هيا بنا نعدل المثال السابق لنعرف المتغيرات بدون الكلمه var :

x = "iam not alone"; // global scope
if ( true ){
    x = "you can"; // modify x on global scope
}
alert(x); // you can
function mm(){
    x = "iam unique"; // function scope
}
mm(); // execute the function
alert(x); // iam unique

كما يتضح من المثال السابق عند تعريف المتغير x داخل ال function بدون كمله var فإنه سيغير قيمه x التى فى ال global scope ، تذكر دائما أن تعرف جميع المتغيرات بكلمه var حتى تتجنب مشاكل ال scope .

اخيرا ملاحظه هامه بخصوص الجافاسكربت داخل المتصفح : جميع المتغيرات ال global تكون خواص الكائن ال window الذى هو نفسه فى بيئه المتصفح global object :

var x = “i can”;
alert(window.x); // you can🙂
alert(x==window.x); // true
function mm(){
// code here
}
alert(window.mm); // function mm(){ }

الأوسمة:

رد واحد to “scope فى الجافاسكربت”

  1. احمد Says:

    شكرا يا مصطفى درس جميل حاليا اقرء في هذه سلسلة

أضف تعليقاً

إملأ الحقول أدناه بالمعلومات المناسبة أو إضغط على إحدى الأيقونات لتسجيل الدخول:

WordPress.com Logo

أنت تعلق بإستخدام حساب WordPress.com. تسجيل خروج   / تغيير )

صورة تويتر

أنت تعلق بإستخدام حساب Twitter. تسجيل خروج   / تغيير )

Facebook photo

أنت تعلق بإستخدام حساب Facebook. تسجيل خروج   / تغيير )

Google+ photo

أنت تعلق بإستخدام حساب Google+. تسجيل خروج   / تغيير )

Connecting to %s


%d مدونون معجبون بهذه: