2014-02-18 2 views
0

я проверил, в два раза проверил и перепроверил этот код, чтобы убедиться, что он работает должным образом (и это просто) но я не могу понять, почему я получаю ~ рассчитывать: 17K для производства, пожалуйста, помогите ...Использование setTimeout для счетчика создает странный вывод?

Спасибо

<html> 
<head> 
</head> 
<body onload = "counter()"> 
<script type="text/javascript"> 
var count = 0; 
function counter() 
{ 
    document.getElementById("div_1").innerHTML = "count: "+count; 
    count++; 
    setTimeout(counter(), 1000); 
} 
</script> 
<div id = "div_1"></div> 
</body> 
</html> 
+0

'setTimeout' принимает ссылку на функцию – zerkms

+0

Да ITS дубликат, не найти это. Я не знаю, я не могу удалить его сейчас, я просто соглашусь с Олесасом. спасибо – pandoragami

ответ

6

не называйте, просто ссылка

setTimeout(counter, 1000); 
+0

Вы имеете в виду, что мне не нужно '()' в конце 'counter'? Итак, в Javascript это ссылка, как указатель на C/C++? – pandoragami

+1

Да. Затем вы пишете 'counter()' вы вызываете свою функцию. И поскольку он ничего не возвращает, это приводит к чему-то вроде 'setTimeout (undefined, 1000)', что ничего не приводит. Когда вы пишете 'setTimeout (счетчик, 1000)' вы reqeusting для вызова функции 'counter' с задержкой 1000 мс. – Olegas

0

функции Wrap в анонимной функции

setTimeout(function(){counter()}, 1000); 

http://jsfiddle.net/tgLqH/

+0

Это выглядит интересно, хотя он делает код более запутанным, чем нужно. – pandoragami

1

вы передаете результат counter() в setTimout, а не только setTimeout(counter, 1000). эффективно, его просто рекурсивная функция. что вы делаете это:

var count = 0; 
var counter = function(){ 
    count++; 
    //Don't flood the console 
    //console.log(count); 
    document.querySelector("#div1").innerHTML = "count: " + count; 
    //you probably don't want this 
    counter(); 
    //but this 
    //setTimeout(counter, 1000); 
}; 

ваш результат 17K где count был когда Javascript исчерпала свой стек вызовов

Смежные вопросы