ميدان يا دامنه، محدوده قابل دسترسي يا مشاهده را براي متغير مشخص ميكند.
جاوااسكريپت داراي سه ميدان بشرح زير دارد:
قبل ازES6 (2015) جاوااسكريپت فقط داراي ميدان جهاني ياسراسري وتابعي بود .
درES6 دو كي ورد مهم وجديدlet , const را معرفي كرد، اين دو كي ورود ميدان بلوكي را شامل ميشوند.
متغير هاي تعريف شده باآنها در يك بلوك{ } نميتوانندخارج ارآن بلوك استفاده شوند.
مثال ـ تعريف متغير باlet
{
let x = 2;
}
// x can NOT be used here
متغير هاي تعريف شده باvar ميدان بلوكي نيستند و آنها ميتوانند در بلوكهاي ديگر هم استفاده شوند.
مثال ـ تعريف متغير باvar
{
var x = 2;
}
// x CAN be used here
متغيرهاي تعريف شده در تابع جاوااسكريپت متغير محلي است .وآن هم داراي ميدان محلي ميباشد.
مثال ـ متغير محلي
// code here can NOT use carName function myFunction() { let carName = "Volvo"; // code here CAN use carName } // code here can NOT use carName
متغيرهاي محلي ميدان تابعي دارند .آنها فقط داخل تابع تعريفي استفاده ميشوند.
ازانجائيكه متغير محلي فقط در تابع خودش قابل شناسائي است، متغيرها با نام يكسان ميتوان در توابع مختلف تعريف نمود .اما آنها هيچ ارتباطي بهمديگر نداشته ومستقل ميباشند.
متغير محلي هنگامي كه تابع شروع ميشود، ايجاد وهنگاميكه پايان مي يابد حذف ميشود.
جاوااسكريپت داراي ميدان تابعي است وهرتابعي ميدان جديدي ايجاد ميكند .متغيري كه درتابعي تعريف ميشود، نمي تواند خارج ازتابع دردسترس ويا مشاهده گردد.
متغيرهائي كه باvar , let , const در داخل تابع تعريف ميشوند، كاملا مشابه هستند . وآنها داراي ميدان تابعي هستند.
function myFunction() {
var carName = "Volvo"; // Function Scope
}
function myFunction() {
let carName = "Volvo"; // Function Scope
}
function myFunction() {
const carName = "Volvo"; // Function Scope
}
متغير هائي كه در خارج از تابع تعريف ميشوند، متغيرهاي سراسري يا جهاني هستند.
مثال ـ متغير سراسري
let carName = "Volvo"; // code here can use carName function myFunction() { // code here can also use carName }
يك متغيرسراسري داراي ميدان سراسري(Global Scope) ميباشد.
همه اسكريپت ها وتوابع در صفحه وب به آنها دسترسي دارند.
متغيرهاي تعريف شده سراسري، يعني خارج از تابع داراي ميدان سراسري هستند.متغيرهاي فوق در هر جائي ازبرنامه جاوااسكريپت قابل دسترس هستند.
متغيرهاي تعريف شده توسطvar , let , const در خارجه توابع از نظر ميدان كاملا
يكسان هستند .همه داراي ميدان سراسري
var x=2; // Golbal Scope
let x=2; // Golbal Scope
const x=2; // Golbal Scope
در جاوااسكريپت اشياء و توابع همچنين متغير ميباشند.
ميدان متغير مشخص كننده فضاي قابل دسترسي متغير ميباشد .شئ ها وتوابع قسمتي از كدها ميباشند.
اگر مقداري را به متغيري نسبت دهيد(assinment) كه تعريف نشده باشد، آن بصورت خودكار متغير سراسري ميشود.
مثال ـ دركد زير متغيرcarNamrمتغير سراسريست باتوجه باينكه اين متغير در تابع مقدار دهي شده است .توجه شود اگر متغير در تابع تعريف ميشد، آن ديگر سراسري نبود.
myFunction(); // code here can use carName function myFunction() { carName = "Volvo"; }
همه مرورگرهاي مدرن اجراي سختگيرانه جاوااسكريپت را پشتيباني ميكنند.
اطلاعات بيشتري در مورد استفاده ازحالت سخت گيرانه در فصل بعدي ارائه ميگردد.
در حالت سخت گيرانه متغير تعريف نشده بصورت خودكار سراسري نمي شود.
با جاوااسكريپت ميدان سراسري در محيط جاوااسكريپت است.
درHTML ميدان سراسري شئ ويندوزاست .
متغيرهاي سراسري با كي وردvar براي شئ ويندوز تعريف ميشوند .
مثال ـ تعريف متغير براي شئ ويندوز
var carName = "Volvo";
// code here can use window.carName
متغير سراسري تعريف شده باlet به شئ ويندوز تعلق ندارد .
مثال ـ تعريف متغير باlet
let carName = "Volvo";
// code here can not use window.carName
هشدار ـ متغير هاي سراسري بيمورد ايجاد نكنيد.
متغيرهاي سراسري شما يا توابع ميتوانند در متغيرهاي ويندوز يا توابع بازنويسي شوند.
هر تابعي در شئ ويندوز ميتواند متغيرهاي سراسري وتوابع را بازنويسي كند.
فعاليت متغير جاوااسكريپت با تعريف آن شروع ميگردد.
متغير هاي تابعي محلي هنگاميكه اجراي تابع بپايان ميرسد، حذف ميشوند.
در مرورگر وب متغيرهاي سراسري هنگاميكه آن بسته ميشود ، حذف ميشوند.
آرگومان تابع آنهائي كه در پرانتز هستند، متغيرهاي محلي داخل تابع اند .وبا پايان اجرا حذف ميشوند.