شعبده بازی با جاوااسکریبت !

جاوا اسکریبت عملا امروز داره بر دنیای وبِ مدرن سلطنت می کنه و این امر به دلیل ماهیت پویا، همچنین یادگیری راحت اون هست !

گفتم راحتی در یادگیری اما در عین این راحتی جاوا اسکریپت پر از سردرگمی هایی هست که جواب اونها رو حتی در Stackoverflow هم نمی تونید پیدا کنید :دی

در واقع موضوع پست ما همینه، می خوام شما رو با چند خط کد ساده به چالش بکشم تا خودتون رو یکم محک بزنید.


مفهومی وجود داره به نام Closure اگه اشتباه نکنم

خب شما حتما می دونید متغیر محلی چیه، گلوبال چی هست !

می خوام با دونسته هاتون جواب این سوال رو بدید،

خروجیه کد زیر چیه ؟

اگه با جاوا اسکریبت آشنایی داشته باشین، حتما جواب رو درست گفتین
خروجی کد بالا هست:

حالا یک کد ساده ی دیگه :

درسته!
کد بالا هم مثل مثال قبل :

رو چاپ می کنه :)

پس ما اگه تابع بالا رو مثل مثال پایین در یک متغیر بریزیم، باز هم خروجی مثل دفعات قبل خواهد بود، مثال :

کد بالا تابع outside رو داخل متغیر trueOutside میریزه و چون تابع outside یک تابع رو بازگشت میده، در صورتی که شما trueOutside رو با () درج کنید، تابع بازگشت داده شده صدا زده میشه !

و اما چالش
در کد زیر، در هر بار صدا زدن تابع trueOutside چه چیزی در خروجی چاپ خواهد شد ؟

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

 

حالا یک تست هوش:
در مثال بالا trueOutside رو سه بار صدا زدیم و هربار یک رقم به text اضافه شد
حالا اگر ۳ بار تابع outside رو به صورت زیر صدا بزنیم چه اتفاقی رخ خواهد داد ؟

 

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

تا اینجا با ی سری از قواعد جاوا اسکریپت آشنا شدید

پس با دونسته هاتون بریم سراغ یه شعبده بازیه جالب

خروجی در کد زیر چیست ؟
اخطار: لطفا با اعتماد به سقف بالا و عجولانه پاسخ ندهیــــد !

 

آفریــــــــــــــن
حتما شما هم به جواب رسیدین:

 

ضمن تبریک به مناسبت پاسخ کاملا اشتباهتون باید خدمتتون عرض کنم خروجی کد بالا هست:

 

نتیجه مشاهدات خود را یادداشت کرده و با اعضای خانواده خود به اشتراک بگذارید :)))
تا شعبده بازیه دیگر، درود و صد بدرود