函数的参数,在javascript中依次用作setTimeout函数的参数

函数的参数,在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) {

上面的代码很好。但我想问的是:我能在函数f2()中使用一些参数吗?它是从调用环境传递来的?即:

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:因为当你声明一个全局变量时,你会把全局名称空间弄得乱七八糟,也就是说,任何其他同名的变量都会被重写。类似地,您可能会意外地覆盖其他有用的全局变量。请详细解释。