Why does setTImeout not work in a loop?

for(var j = 0; j < mass_child.length; ++j){ name = mass_child[j].className if(name == undefined) continue if(name == mass_class_name[0] || name == mass_class_name[1] || name == mass_class_name[2]){ mass_child[j].style.opacity = option if(option == 0) { setTimeout(function(){ mass_child[j].style.display = 'none' },100) } } } 

Probyval through closure, but still

  for(var j = 0; j < mass_child.length; ++j){ name = mass_child[j].className if(name == undefined) continue if(name == mass_class_name[0] || name == mass_class_name[1] || name == mass_class_name[2]){ mass_child[j].style.opacity = option if(option == 0) { (function(i){ return function(){ setTimeout(function(){ mass_child[j].style.display = 'none' },100) } }(j)) } }} 

Reported as a duplicate at Grundy. javascript Apr 9 '17 at 20:19 .

A similar question was asked earlier and an answer has already been received. If the answers provided are not exhaustive, please ask a new question .

    1 answer 1

    You tried everything correctly with closures, only you made a mistake:

     (function(i){ setTimeout(function(){ mass_child[i/*i вместо j надо*/].style.display = 'none' },100) }(j))