1) из моих тестов, если вы называете функцию как переменную, это не может быть хорошо: D:
var foo = {i:'my number'};
function foo(){
alert(foo.i);
}
либо foo будет интерпретироваться как объект, либо как функция,но он не может содержать два разных значения одновременно.
2) когда вы отправляете параметр как вызов функции (setTimeout(myFunction(),t)
), функция выполняется, когда определяется setTimeout.Правильный способ сделать это - отправить функцию, а не вызов функции или строку, которая будет оценена:
setTimeout(myFunction,t);
// or
setTimeout("myFcuntion()",t);
// or the best way :
setTimeout(function(){myFunction();},t);
3) timer
объявлено в другом объеме, чем функция clearInterval
Таким образом, когда вы хотите очистить интервал, вы не имеете никакой ссылки на сам интервал, потому что timer
равен undefined
.Вы должны сделать так, чтобы они оба находились в одной и той же области видимости, или вы можете объявить timer
глобальным (без ключевого слова var
), сделав таким образом timer
видимым в глобальной области видимости, где его может увидеть любая третья сторона.