基本上我有一个通过这个的函数......我需要在点击按钮后 1/3 秒执行这个函数,所以我想做的是:
setTimeout("somefunction(this)", 3000);
据我所知, setTimeout("", x); 与“”一起使用,但它不起作用。
我试过没有“”,但我尝试过它也行不通:
setTimeout("somefunction("+this+")", 3000);
仍然无法正常工作。确实喜欢一个小时的尝试。
任何帮助将不胜感激。
基本上我有一个通过这个的函数......我需要在点击按钮后 1/3 秒执行这个函数,所以我想做的是:
setTimeout("somefunction(this)", 3000);
据我所知, setTimeout("", x); 与“”一起使用,但它不起作用。
我试过没有“”,但我尝试过它也行不通:
setTimeout("somefunction("+this+")", 3000);
仍然无法正常工作。确实喜欢一个小时的尝试。
任何帮助将不胜感激。
您需要使用闭包
var that = this;
setTimeout( function(){ somefunction(that); }, 3000);
超时是异步事件,因此上下文丢失。保存它的一种方法是通过立即执行的函数绑定它。
setTimeout((function(that) {
return function() { somefunction(that); };
})(this), 3000);
另一种方法是引用变量中的外部范围,正如@epascarello 的回答所示。
传递函数引用总是比传递字符串好setTimeout
,setInterval
因为后者是被评估的,而评估是邪恶的。