J'ai une fonction dormir en javascript comme ci-dessous:pourquoi setTimeout est pas exécuté en javascript
var is_sleep = true;
function sleep(time){
if (is_sleep){
is_sleep = false;
setTimeout("sleep(time)", time);
}else{
is_sleep = true;
}
}
sleep(3000);
Cependant, il passe par les déclarations pour is_sleep = true, ne passe pas par des déclarations de is_sleep = faux et doesn ne dors plus.
Quelqu'un pourrait dire quelle est la raison? Merci d'avance.
vous êtes très cool! avec votre aide, ça a marché! – ywenbo
merci beaucoup. Pourriez-vous me dire pourquoi le temps passé dans "le sommeil" n'est pas la durée? Je ne comprends pas même si cela a fonctionné, :-) – ywenbo
@ywenbo: Bien sûr. Lorsque vous passez une chaîne en paramètre à 'setTimeout', lorsque le délai expire, il l'évalue dans la portée de' window'. 'time' ne sera pas dans la portée de' window'; il sera dans la portée maintenant inaccessible de 'sommeil '. Si vous utilisez une fermeture, elle hérite de la portée à partir de laquelle elle est définie. Si vous utilisez la seconde méthode, il passe 'sleep' comme référence et dit' setTimeout' pour lui passer 'time' comme argument. – icktoofay