基本上我有一个传递这个功能......我需要在点击一个按钮后1/3秒执行此功能,所以我想做的是:
setTimeout("somefunction(this)", 3000);
我知道setTimeout(“”,x);适用于“” 但它不起作用。
我试过没有“”而且它也无法工作,我试图:
setTimeout("somefunction("+this+")", 3000);
仍然无法正常工作。就像一小时的尝试一样。
任何帮助都将受到高度赞赏。
答案 0 :(得分:2)
您需要使用闭包
var that = this;
setTimeout( function(){ somefunction(that); }, 3000);
答案 1 :(得分:1)
超时是异步事件,因此上下文丢失。保留它的一种方法是通过立即执行的函数绑定它。
setTimeout((function(that) {
return function() { somefunction(that); };
})(this), 3000);
另一种方法是在变量中引用外部作用域,如@ epascarello的答案所示。
最好将函数引用传递给setTimeout
和setInterval
而不是字符串,因为后者是被评估的,而eval'ing是邪恶的。