2017-03-03 95 views
-3

我是一个JavaScript学习者 听到的是我的javascript的JavaScript的setTimeout()不工作

我有一个JavaScript函数名为get(); ,我把它叫做onload.

function get() { 
 
    for (var i = 1; i <= 5; i++) { 
 
    setTimeout(function() { 
 
     console.log('Value of i : ' + i); 
 
    }, 100); 
 
    } 
 
}
<!DOCTYPE html> 
 
<html> 
 

 
<head> 
 
    <meta charset="ISO-8859-1"> 
 
</head> 
 

 
<body onload="get();"> 
 
</body> 
 

 
</html>

的预计产量为

Value of i : 1 
Value of i : 2 
Value of i : 3 
Value of i : 4 
Value of i : 5 

这里作为我得到

Value of i : 6 

无法弄清楚究竟是什么是错的。

+0

只要您不知道要搜索什么,它就不是重复的。对于有经验的javascript开发人员来说,这是重复的,是的,但不是新手。 –

+0

@KishanCS你不能。这篇文章有答案。这是为什么回答一个愚蠢被认为是不好的主要原因。这将作为一个冗余的职位。 – Rajesh

+1

家伙们对倒票有些怜悯.. –

回答

1

您可以使用具有自己范围的let,或者您可以在那里创建closure

使用让

<!DOCTYPE html> 
 
<html> 
 
<head> 
 
<meta charset="ISO-8859-1"> 
 
</head> 
 
<script> 
 
    function get() { 
 
     for (let i = 1; i <= 5; i++) { 
 
      setTimeout(function() { 
 
       console.log('Value of i : ' + i); 
 
      }, 100); 
 
     } 
 
    } 
 
</script> 
 
<body onload="get();"> 
 
</body> 
 
</html>

封闭段

<!DOCTYPE html> 
 
<html> 
 

 
<head> 
 
    <meta charset="ISO-8859-1"> 
 
</head> 
 
<script> 
 
    function get() { 
 
    for (let i = 1; i <= 5; i++) { 
 
     setTimeout(((function(i) { 
 
     return function() { 
 
      console.log('Value of i : ' + i); 
 
     } 
 
     })(i)), 100); 
 
    } 
 
    } 
 
</script> 
 

 
<body onload="get();"> 
 
</body> 
 

 
</html>

+0

这适用于(let i = 1; i <= 5; i ++)//使用let你可以解释 –

+1

它不是重复的,因为提问的人不熟悉集群的概念,因此怀疑setTimeout-Function中有错误。 –

+1

@TobiasGassmann它不关于熟悉。如果问题与其他某些帖子相似,并且该帖子中的解决方案可以解决问题,则会考虑这个问题。 – Rajesh

3

来做到这一点,正确的做法是:

<!DOCTYPE html> 
<html> 
<head> 
<meta charset="ISO-8859-1"> 
</head> 
<script> 
    function get() { 
     for (var i = 1; i <= 5; i++) { 
      setTimeout(function(x) { 
       console.log('Value of i : ' + x); 
      }(i), 100); 
     } 
    } 
</script> 
<body onload="get();"> 
</body> 
</html> 

通知的(I)在:

setTimeout(function(x) { 
     console.log('Value of i : ' + x); 
    }(i), 100); 
} 

你这是怎么值传递给一个setTimeout函数。