1
function f1()
{
  c = setTimeout(f2,200);
}
function f2()
{
 //code
}

上面的代码就好了。但我想问的是:我可以在从调用环境传递的函数 f2() 中使用一些参数吗?那是:

 function f1(v1)
    {
      c = setTimeout(f2(v1),200);
    }
    function f2(v2)
    {
     //code
    }

它有效吗?因为我尝试过这样的事情,但问题是我无法通过使用变量 c 来清除超时。我不知道该怎么办。

4

3 回答 3

1

使用闭包-

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为全局变量(这很糟糕),您可以使用以下命令轻松清除超时 -

clearTimeout(c);

如果您仍然无法清除超时,则仅表示持续时间已过并且您的回调已触发,或者其他地方存在错误。在这种情况下,请发布您用于清除超时的代码。

于 2013-09-01T10:32:29.860 回答
0

您可以使用 function.bind 方法,也可以简单地包装调用

function f1(v1) { 
    c = setTimeout(function() {
        f2(v1);
    }, 200); 
} 
于 2013-09-01T10:34:56.680 回答
0
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);
}

或者这样:

// Call `f2` with some params from `f1`
function f1 (v1) {
  timeout = setTimeout(function () { f2(v1) }, 200);
}

回答您的问题:您无法清除超时,因为您立即执行功能。

于 2013-09-01T10:31:15.660 回答