من برای نوشتن کد هام از jsbin استفاده می کنم.
if(true){
var age = 29
}
console.log(age)
خوب اگه از این کد کنسول لاگ بگیرید خارج از if مقدار age رو بهتون برمی گردونه، انتظار همچین چیزی رو هم داریم چون در es5 همین جوری کد می زدیم.
اما اگه حالا به جای var از let استفاده کنیم:
if(true){
let age = 29
}
console.log(age)
در jsbin با همچین اروری روبه رو خواهیم شد:
"ReferenceError: age is not defined
at zowulejiwo.js:4:38
at https://static.jsbin.com/js/prod/runner-4.1.7.min.js:1:13924
at https://static.jsbin.com/js/prod/runner-4.1.7.min.js:1:10866"
که داره می گه که age تعریف نشده است.
اگه در jsbin دقیق تر نگاه کنید :
در واقع داره می گه که این let که شما استفاده کردید در es6 ه و ممکن تمام مرورگر ها اون رو نفهمن.
فکر کنم تا اینجای کار فهمیده باشید که چرا وقتی کنسول گرفتیم ارور رو دیدیم در واقع در es6 متغییر ها می توانند به صورت محلی و سراسری تعریف بشن.
درواقع age در اینجا یک متغییر محلی است.
بیاین یه جور دیگه این کد رو بنویسیم:
if(true){
let age = 29
console.log(age)
}
حالا که کنسول رو اوردیم داخل بلاک کد می تونیم اون age رو ببینم.
در es5 هیچ مشکلی وجود نداره که شما اول به متغییر مقدار بدید بعد تعیریفش کنید:
age = 5;
var age;
console.log(age);
اما اگه همین کار رو با let انجام بدید شما ارور می گیرید:
age = 5;
let age;
console.log(age);
و ارورش:
اما مقدار دهی بعد از تعریف مشکلی نداره:
let age;
age = 5;
console.log(age);
و کار می کنهههههه.
اول تعریف بعد مقدار دهی.
یه کیبورد دیگه برای تعریف متغییر const است که برای ثابت ها ازش استفاده می کنیم.
مقداری که در طول برنامه نویسی تغییر نمی کنه.
const a = 29;
a = 30;
وقتی که سعی کردیم دوباره به اون مقدار بدیم همچین اروری بر خوردیم:
من عاشق جاوا اسکریپتم و دارم تازه یادمی گیرم و در حال یادگیری یه سری یادداشت ها ور می دارم که بعد اگه نیاز شد دوباره مرورشون کنم. دوره آموزشی جاوااسکریپت ES6 که دارم می بینم.