试图为函数和passvariable设置timeout - 不起作用

时间:2012-07-30 18:54:28

标签: javascript jquery

基本上我有一个传递这个功能......我需要在点击一个按钮后1/3秒执行此功能,所以我想做的是:

setTimeout("somefunction(this)", 3000);

我知道setTimeout(“”,x);适用于“” 但它不起作用。

我试过没有“”而且它也无法工作,我试图:

  setTimeout("somefunction("+this+")", 3000);

仍然无法正常工作。就像一小时的尝试一样。

任何帮助都将受到高度赞赏。

2 个答案:

答案 0 :(得分:2)

您需要使用闭包

var that = this;
setTimeout( function(){ somefunction(that); }, 3000);

答案 1 :(得分:1)

超时是异步事件,因此上下文丢失。保留它的一种方法是通过立即执行的函数绑定它。

setTimeout((function(that) {
    return function() { somefunction(that); };
})(this), 3000);

另一种方法是在变量中引用外部作用域,如@ epascarello的答案所示。

最好将函数引用传递给setTimeoutsetInterval而不是字符串,因为后者是被评估的,而eval'ing是邪恶的。