כיצד להעביר פרמטר לולאה לפונקציה אסינכרונית ב- JavaScript
כולנו היינו שם, אנחנו מנסים לעשות לולאה וקוראים לפונקציה בתוכה כמה פעמים. אבל כל פעם שהפונקציה רצה היא מקבלת את הערך האחרון. הדבר נובע מהעובדה שהפונקציה נקראת בצורה אסינכרונית ולכן כשמגיעה זמנה לרוץ, באמת הערך של המשתנה כבר הגיע לסוף הלולאה.
הפתרון הוא ליצור מעין צילום של הפרמטר אשר יעבור אל הפונקציה. מה שעומד לעזרתנו הוא העבודה שבעת קריאה לפונקציה ב- JavasScript, נוצר העתק של הפרמטר. את ההעתק הזה נעביר לפונקציה האסינכרונית כי מובטח לנו שתמיד יישאר זהה ולא תלוי במשתנה הלולאה. זה נראה כך:
for (x = 0; x < 100; x++) {
// this is the function that is used to capture the parameter (x as x)
(function (x) {
// this is the asynchronous function
setTimeout(function () {
console.log(x)
})
})(x)
// the output of this function should be 1 thru 100.
}
בהצלחה