1

基本上我有一个通过这个的函数......我需要在点击按钮后 1/3 秒执行这个函数,所以我想做的是:

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

据我所知, setTimeout("", x); 与“”一起使用,但它不起作用。

我试过没有“”,但我尝试过它也行不通:

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

仍然无法正常工作。确实喜欢一个小时的尝试。

任何帮助将不胜感激。

4

2 回答 2

2

您需要使用闭包

var that = this;
setTimeout( function(){ somefunction(that); }, 3000);
于 2012-07-30T18:57:00.903 回答
1

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

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

另一种方法是引用变量中的外部范围,正如@epascarello 的回答所示。

传递函数引用总是比传递字符串好setTimeoutsetInterval因为后者是被评估的,而评估是邪恶的。

于 2012-07-30T18:56:50.220 回答