请查看以下代码:
function increase(i)
{
i++; if(i==100) return;
var timer=setTimeout(function(){increase(i);}, 8);
}
这个setTimeout函数会立即执行,但我想要 它以后执行。为什么?
示例:
if (a==b) clearTimeout(timer);
现在,当某些事情发生时,我需要在另一个函数中停止并退出此函数:
{{1}}
困扰我的是,无论何时,变量计时器都会被分配 功能增加运行,但它不需要,我相信这是不好的做法。这就是为什么我需要在函数运行之前只分配一次,并在需要到达时执行它。
我希望你理解,顺便说一下,这些只是例子,而不是我的代码。
答案 0 :(得分:0)
由于delay
中的setTimeout
需要毫秒作为时间单位,所以在您的代码中,您将函数设置为在8ms后执行,感觉就像是立即执行。 / p>
答案 1 :(得分:0)
如果希望一个函数的操作改变另一个函数的条件,只需在两个函数的范围内声明一个布尔变量,并根据终止函数改变它的值。
例如,看看这段代码:
var exit = false;
function increase(i) {
if(i==100 || exit) return;
setTimeout(function(){ increase(++i) }, 1000);
}
function terminator(a, b){
exit = (a==b);
}
increase(0);
在这里,如果用一对相同的参数调用terminator
,如:
setTimeout(function(){ terminator(true, 1) }, 5000) // timeout of 5 seconds means increase will run 5 times
setTimeout
函数中increase
的递归调用将不会达到(5秒后),因为函数将在到达该行代码之前返回。
如果永远不会调用terminator
,或者调用不相等的参数,例如:
setTimeout(function(){ terminator(true, false) }, 5000) // using setTimeout here is just arbitrary, for consistency's sake
increase
只有在完成100次递归后才会超时(换句话说,经过100秒后)
希望这有帮助!
答案 2 :(得分:0)
function increase(i, boolean) {
i++;
if (i == 100) return;
if (boolean) {
var timer = setTimeout(function() {
increase(i, true);
console.log(i);
}, 8);
}
}
increase(1,true);
你提出了一些额外的论点 功能?
答案 3 :(得分:0)
您可以在函数之外声明调用setTimeout
的变量,在调用函数时将变量定义为setTimeout
;从另一个函数调用clearTimeout()
,其中变量引用setTimeout
作为参数。
var timer = null, // declare `timer` variable
n = 0, // reference for `i` inside of `increase`
i = 0,
a = 50,
b = 50,
// pass `increase` to `t`, call `increase` at `setTimeout`
t = function(fn, i) {
// define timer
timer = setTimeout(function() {
fn(i)
}, 8)
};
function increase(i) {
console.log(i);
// set `n` to current value of `i` to access `i`:`n`
// to access `i` value outside of `t`, `increase` functions
n = i++;
if (i == 100) return;
t(increase, i); // call `t`
}
increase(i);
// do stuff outside of `t`, `increase`
setTimeout(function() {
// clear `timer` after `200ms` if `a == b`
if (a == b) {clearTimeout(timer)};
alert(n)
}, 200)