函数的参数,在javascript中依次用作setTimeout函数的参数
上面的代码很好。但我想问的是:我能在函数f2()中使用一些参数吗?它是从调用环境传递来的?即:函数的参数,在javascript中依次用作setTimeout函数的参数,javascript,settimeout,Javascript,Settimeout,上面的代码很好。但我想问的是:我能在函数f2()中使用一些参数吗?它是从调用环境传递来的?即: function f1() { c = setTimeout(f2,200); } function f2() { //code } 它有效吗?因为我尝试了类似的方法,但问题是我无法使用变量c清除超时。我不知道该怎么办 function f1(v1) { c = setTimeout(f2(v1),200); } function f2(v2) {
function f1()
{
c = setTimeout(f2,200);
}
function f2()
{
//code
}
它有效吗?因为我尝试了类似的方法,但问题是我无法使用变量c清除超时。我不知道该怎么办
function f1(v1)
{
c = setTimeout(f2(v1),200);
}
function f2(v2)
{
//code
}
或者以这种方式:
var timeout;
// Call `f2` with all arguments that was passed to the `f1`
function f1 () {
var args = arguments;
timeout = setTimeout(function () { f2.apply(this, args) }, 200);
}
回答您的问题:您无法清除超时,因为您立即执行了函数
或者以这种方式:
var timeout;
// Call `f2` with all arguments that was passed to the `f1`
function f1 () {
var args = arguments;
timeout = setTimeout(function () { f2.apply(this, args) }, 200);
}
回答您的问题:您无法清除超时,因为您立即执行函数。使用-
通过这种方式,您将能够传递任意数量的参数
由于将c
声明为全局变量(这是错误的),因此可以使用以下命令轻松清除超时-
function f1(v1)
{
c = setTimeout(f2(v1), 200);
}
function f2(v2)
{
return function () {
// use v2 here, and put the rest of your
// callback code here.
}
}
如果您仍然无法清除超时,这只意味着持续时间已过,并且您的回调已启动,或者在其他地方出现了一些错误。在这种情况下,发布用于清除超时的代码。使用-
通过这种方式,您将能够传递任意数量的参数
由于将c
声明为全局变量(这是错误的),因此可以使用以下命令轻松清除超时-
function f1(v1)
{
c = setTimeout(f2(v1), 200);
}
function f2(v2)
{
return function () {
// use v2 here, and put the rest of your
// callback code here.
}
}
如果您仍然无法清除超时,这只意味着持续时间已过,并且您的回调已启动,或者在其他地方出现了一些错误。在这种情况下,发布用于清除超时的代码。您可以使用function.bind方法,也可以简单地包装调用
clearTimeout(c);
您可以使用function.bind方法,也可以简单地包装调用
clearTimeout(c);
thnks@sayem,,,,它很好用!!!我很高兴从你那里知道为什么将c声明为全局变量是不好的?@rosemary:因为当你声明一个全局变量时,你会把全局名称空间弄得乱七八糟,也就是说,任何其他同名的变量都会被重写。类似地,您可能会意外地覆盖其他有用的全局变量。请详细解释一下。thnks@sayem,,,,它很好用!!!我很高兴从你那里知道为什么将c声明为全局变量是不好的?@rosemary:因为当你声明一个全局变量时,你会把全局名称空间弄得乱七八糟,也就是说,任何其他同名的变量都会被重写。类似地,您可能会意外地覆盖其他有用的全局变量。请详细解释。