سوال جالبی که گوگل در مصاحبه جاوا اسکریپت می پرسه

سوال مصاحبه ای معروف جی اس
سوال مصاحبه ای معروف جی اس

سوال باحال و معروفی از جاوا اسکریپت وجود داره که توی مصاحبه های استخدامی گوگل، آمازون و ... زیاد پرسیده شده.

سوال
خروجی کد زیر چیست؟

const arr = [10, 12, 15, 21];

for ( var i = 0; i < arr.length; i++ ) {
setTimeout( function () {
console.log( 'Index: ' + i + ', element: ' + arr[ i ] );
}, 3000);
}

اگر جواب این سوال رو میتونید بگید پس روی چند تا از مسائل پایه ای جاوا اسکرپیت مثل closure، scope setTimeout تسلط کافی دارید:)




جواب سوال

این کد ۴ بار خروجی زیر رو چاپ میکنه:

Index: 4, element: undefined


مراحل اجرای کد


طول آرایه arr برابر ۴ هست پس i در ۴ مرتبه برابر ۰ و ۱ و ۲ و ۳ می باشد و در بار آخری که بررسی می شود برابر ۴ می باشد.

از طرف دیگر توابع closure در جاوا اسکریپت از متغیر های scope بالایی خود مطلع هستند.

یعنی تابعی که به صورت closure به setTimeout می دهیم مقدار i که آخرین بار قبل از گذشت ۳ ثانیه برابر ۴ شده بود رو داره.

پس ۴ بار این تابع اجرا می شود و هر بار i را که برابر ۴ و سپس [arr[4 که undefined هست رو چاپ می کند.