নিচে একটি for loop
এর ভিতর 0 ms
পর পর console
এ ভ্যালু লগ করা হয়েছে। আপনাকে বলতে হবে কোডের ফাইনাল আউটপুট কি হবে?
for (var i = 0; i < 10; i++) { setTimeout(() => console.log(i), 0); }
নিচে একটি for loop
এর ভিতর 0 ms
পর পর console
এ ভ্যালু লগ করা হয়েছে। আপনাকে বলতে হবে কোডের ফাইনাল আউটপুট কি হবে?
for (var i = 0; i < 10; i++) { setTimeout(() => console.log(i), 0); }
আমরা জানি setTimeout ফাংশনটি এসিনক্রোনাসলি কাজ করে। for loop এর এক্সিকিউশন আবার সিনক্রোনাসলি কাজ করে। তাই লুপের প্রতিটা ইটারেশনের কাজ গুলো সিনক্রোনাসলি আগে হয়ে যাবে। এর পরে একটা একটা করে 10 টা setTimeout এর কলব্যাক ফাংশন কল হবে। কল হবার সময় setTimeout এর কলব্যাক ফাংশন গুলো যখন 'i' এর ভ্যালু এক্সেস করতে যাবে, তখন ইতিমধ্যে সেটার ভ্যালু 10 হয়ে গেছে কারণ for loop এর initialization এর সময় 'i' কে 'var' দিয়ে ডিক্লেয়ার করা হয়েছে। জাভাস্ক্রিপ্টের স্কোপের নিয়ম অনুযায়ী 'var' কিন্তু ব্লক স্কোপড নয়। এটি গ্লোবাল স্কোপড বা ফাংশন স্কোপড। তাই প্রতিটা ইটারেশনে 'i' এর মান বাড়ার সাথে সাথে ঐ global variable এর মানটিই পরিবর্তন হতে থেকেছে। যার কারণে সবশেষে setTimeout এর কলব্যাক ফাংশন সবসময় 'i' এর মান 10 ই পাবে। একারণে ফাইনাল আউটপুট দশটি 10 হবে।