Javascript 如何在setTimeout中将参数传递给函数

Javascript 如何在setTimeout中将参数传递给函数,javascript,jquery,Javascript,Jquery,我有以下代码: function fn($){ return function(){ innerFn = function(){ setTimeout(show, 1000); }; show = function(){ $.alert("TEST"); } } } 但是,一秒钟后,当函数show运行时,它会说$未定义。我如何解决这个问题 如何在setTimeout中将参数传递给函数 setTimeout具有用于添加参数的 va

我有以下代码:

function fn($){
  return function(){
    innerFn = function(){
      setTimeout(show, 1000);
    };

    show = function(){
      $.alert("TEST");
    }
  }
}
但是,一秒钟后,当函数
show
运行时,它会说$未定义。我如何解决这个问题

如何在setTimeout中将参数传递给函数

setTimeout具有用于添加参数的

var timeoutID=window.setTimeout(func,delay,[param1,param2,…)

使用它

如果你要使用
这个
,你应该小心。但这是另一个问题

如何在setTimeout中将参数传递给函数

setTimeout具有用于添加参数的

var timeoutID=window.setTimeout(func,delay,[param1,param2,…)

使用它


如果你要使用
这个
,你应该小心。但这是另一个问题。

这里有很多因素在起作用。最重要的是你的setTimeout永远不会被调用,因为innerFn永远不会被调用。这应该能奏效

function fn($){
  return function(){
    setTimeout(function(){
      $.alert("TEST");
    }, 1000);
  }
}

fn(window)(); //triggers your alert after 1000ms

这里有很多事情在起作用。最重要的是你的setTimeout永远不会被调用,因为innerFn永远不会被调用。这应该能奏效

function fn($){
  return function(){
    setTimeout(function(){
      $.alert("TEST");
    }, 1000);
  }
}

fn(window)(); //triggers your alert after 1000ms

您的代码毫无意义,因为未调用任何内容:

function fn($){
  return function(){
    innerFn = function(){
      setTimeout(show, 1000);
    };

    show = function(){
      $.alert("TEST");
    }
  }
}
假设我正在调用
fn
传递
窗口
,然后返回一个我可以执行的函数。但是,因为这个函数只包含函数声明-您还忘记了
var
,所以您污染了全局范围,这是不好的-什么都没有发生

内部至少需要一个函数调用,如:

function fn($){
  return function(){
    var innerFn = function(){
      setTimeout(show, 1000);
    };

    var show = function(){
      $.alert("TEST");
    }

    innerFn();
  }
}

fn(window)();
这将起作用。然而,这绝对是多余的。你只需要:

function fn($){
  return function(){
    function show(){
      $.alert("TEST");
    }

    setTimeout(show, 1000);
  }
}
以获得相同的结果。然而,如果您的目标只是绑定了一个参数,那么您可以使用。如文档所述,您可以使用
setTimeout
的第三个参数,但似乎是这样

因此,
bind
的示例如下所示:

function show() {
    this.alert('test');
}

setTimeout(show.bind(window), 1000);
另外请注意,
window
在默认情况下是全局对象,因此通常不必这样做,只需发出
alert
就足够了。然而,我认为这不是您的实际代码,而只是一个测试,正如警报的字符串所说

如果您更喜欢使用
窗口
作为第一个参数,并且您对上下文对象
不感兴趣,则可以执行以下操作:

function show($) {
    $.alert('test');
}

setTimeout(show.bind(null, window), 1000);

您的代码毫无意义,因为未调用任何内容:

function fn($){
  return function(){
    innerFn = function(){
      setTimeout(show, 1000);
    };

    show = function(){
      $.alert("TEST");
    }
  }
}
假设我正在调用
fn
传递
窗口
,然后返回一个我可以执行的函数。但是,因为这个函数只包含函数声明-您还忘记了
var
,所以您污染了全局范围,这是不好的-什么都没有发生

内部至少需要一个函数调用,如:

function fn($){
  return function(){
    var innerFn = function(){
      setTimeout(show, 1000);
    };

    var show = function(){
      $.alert("TEST");
    }

    innerFn();
  }
}

fn(window)();
这将起作用。然而,这绝对是多余的。你只需要:

function fn($){
  return function(){
    function show(){
      $.alert("TEST");
    }

    setTimeout(show, 1000);
  }
}
以获得相同的结果。然而,如果您的目标只是绑定了一个参数,那么您可以使用。如文档所述,您可以使用
setTimeout
的第三个参数,但似乎是这样

因此,
bind
的示例如下所示:

function show() {
    this.alert('test');
}

setTimeout(show.bind(window), 1000);
另外请注意,
window
在默认情况下是全局对象,因此通常不必这样做,只需发出
alert
就足够了。然而,我认为这不是您的实际代码,而只是一个测试,正如警报的字符串所说

如果您更喜欢使用
窗口
作为第一个参数,并且您对上下文对象
不感兴趣,则可以执行以下操作:

function show($) {
    $.alert('test');
}

setTimeout(show.bind(null, window), 1000);

何时以及如何调用
fn
?(以及如何调用
show
)在加载的页面上,调用fn.like yui module.
$
应该在
show
中可用,如果它是在调用
fn
时定义的。我尝试了闭包,但做不到。setTimeout上下文是窗口,它没有$。何时以及如何调用
fn
?(还有,
show
是如何调用的?)在加载的页面上,调用fn.like yui module.
$
应该在
show
中可用,如果它是在调用
fn
时定义的。我尝试了闭包,但做不到。setTimeout上下文是窗口,它没有$。我在其他地方调用了innerFn,这只是一个例子。我想知道,与上面的代码一样,如何实现?在当前示例中,show函数可以访问$variable,因为它位于“parent”范围内。您的实际代码中肯定还有其他内容。我在其他地方调用了innerFn,这只是一个示例。我想知道,像上面的代码一样,如何实现?在您当前的示例中,show函数可以访问$variable,因为它在“父”范围内。在您的实际代码中肯定还有其他东西。