Это может быть простой проблемой, но я не могу вставлять параметр переменной в функцию для будущего выполнения. "alert" - это функция, которую я хотел бы отложить выполнение, с параметрами 0, 1, 2 и т.д.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<script language="JavaScript">
var init = function init() {
for (var i = 0, max = 3; i < max; i++) {
var then;
then = (function(jj) {
return jj;
}(i));
var pp = function(jj) {
return alert(then);
};
setTimeout(function() {
pp();
}, then * 1000);
}
};
</script>
</head>
<body onload="init();">
<button onclick="init();"></button>
</body>
</html>
Это предупредит номер, затем подождет секунду и предупредит другой номер. До достижения 3:
var init = function() {
var counter = 0, //Start
max = 3 //End
var count = function() {
alert(counter) //Alert
if ( counter < max ) { //If we havent reached 3 then queue this function to be called again
window.setTimeout(function() {
count()
}, 1000)
}
counter++
}
count() //Start the counter
}
Вот скрипка: http://jsfiddle.net/EXwH2/1/
Вы действительно не задавали вопрос, поэтому я предполагаю, что любая реализация, которая дает ожидаемые результаты, - это то, что вы хотите.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<script language="JavaScript">
function createfunc(i) {
return function() { alert(i); };
}
var init = function init() {
for (var i = 0, max = 3; i < max; i++) {
var func = createfunc(i);
setTimeout(func, i * 1000);
}
};
</script>
</head>
<body onload="init();">
<button onclick="init();"></button>
</body>
</html>
Вы включили первую функцию в закрытие, но не вторую, поэтому вы по существу установите ваш pp
var на последнюю итерацию до того, как вызывается setTimeout
в первый раз. Каково ваше намерение с переменной then
? Если вы хотите пошатнуть вызовы, каждый со своим значением, вы можете захотеть поместить вызов самому setTimeout
в свое собственное закрытие:
var init = function init() {
for (var i = 0, max = 3; i < max; i++) {
(function (jj) {
setTimeout(function() {
alert(jj);
}, jj * 1000);
})(i);
}
};