Skip to content Skip to sidebar Skip to footer

Use Iife In Settimeout In A Loop, But Why?

I know it is a classic js question: (My question is not how to solve this problem, but how IIFE solve this problem. Thanks for the other answer link but I didn't find the answer I

Solution 1:

If I understand your question correctly, you want to print 0...4. You can achieve that by using let instead of var which creates a new binding of i for each loop iteration [1], [2]:

// Prints 0, 1, 2, 3, 4:for (let i = 0; i < 5; i++) {
    setTimeout(function() {
        console.log(i);
    }, 1000);
}

Your suggestion to add an argument i to the callback fails as the calling function setTimeout doesn't pass anything to the callback. Thus the i argument is undefined.

Alternatively, use the classic IIFE approach:

for (var i = 0; i < 5; i++) {
    (function(i) {
        setTimeout(function() {
            console.log(i);
        }, 1000);
    })(i);
}

Even better, of course, would be to move the for-loop into the setTimeout callback. But I assume you chose this code for demonstration purposes only.

Post a Comment for "Use Iife In Settimeout In A Loop, But Why?"