خب توی نگاه اول به نظر میرسه که خیلی خوب باشه؛ چون یه متغیر هست که ما همه جا بهش دسترسی داریم و لازم نیست هربار اون رو تعریف کنیم و بهش مقدار بدیم. اما صبر کنین! آیا واقعا به همین خوبی هست که به نظر میرسه؟ نمونه کد زیر رو ببینید:

window.name = "شایان شایان پرور";

function greeting() {
    console.log("سلام آقای " + window.name);
}

greeting(); // سلام آقای شایان شایان پرور

// ...

function userCustomFunction() {
    window.name = "سارا سارانژاد";
}

userCustomFunction();

greeting(); // سلام آقای سارا سارانژاد

توی خط اول من یک متغیر سراسری تعریف کردم به اسم name. بعد یک تابع درست کردم (greeting) که به name ما، سلام و خوش‌آمد گویی میگه. توی خط 7 وقتی تابع رو اجرا میکنم خروجی ما اینه: سلام آقای شایان شایان پرور

توی خط 11 من یه تابع درست کردم. فرض کنین این تابع یه تابعی هست که یه جای دیگه از برنامه تعریف شده، مثلا توی یک فایل دیگه. وقتی این تابع رو توی خط 15 اجرا میکنم، مقدار متغیر سراسری رو تغییر میده. و نهایتا وقتی که تابع greeting رو اجرا میکنم ، فکر میکنین خروجی ما چیه؟ سلام آقای سارا سارانژاد :)

همونطور که دیدید تابع userCustomFunction کار خودش رو کرد. یعنی مقدار متغیر سراسری ما رو خیلی راحت عوض کرد که باعث شد خروجی یک قسمت دیگه از برنامه ما تغییر کنه.

بزرگترین عیب متغیرهای سراسری همینه. یعنی وقتی برنامه بزرگ و بزرگتر میشه، خیلی سخته که متوجه بشیم کدوم قسمت برنامه، مقدار متغیر سراسری رو تغییر داده. همچنین خیلی راحت میشه این مقادیر رو حذف کرد:

delete window.name;

greeting(); // سلام آقای undefined

خب باید چکار کرد؟ بهترین راهکار اینه که متغیرهامون رو توی حوزه لوکال تعریف کنیم یا با آرگومان پاس بدیم. مثل کد زیر:

function greeting(name) {
    console.log("Hi Mr " + name);
}

بطور کلی هر چیزی که توی دنیای برنامه‌نویسی وجود داره و معرفی شده، یه سری مزایا و معایبی داره که اونها رو بدونیم و بعد استفاده کنیم. متغیرهای سراسری رو اگه درست ازشون استفاده کنیم خیلی هم خوب هستن ولی خب در کل استفاده از اونها ریسک بالایی داره.