2017-03-03 35 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函數。