关于setTimeout / Interval上下文

时间:2012-08-13 09:36:57

标签: javascript call settimeout

为什么我不能这样做:

function f(){console.log(this)}
f.call(this);
setInterval(f.call, 1000, this);

4 个答案:

答案 0 :(得分:2)

您应该使用.bind代替.call

function f(){console.log(this)}
setInterval(f.bind(the_context_obj), 1000);

答案 1 :(得分:1)

试试这个:

setInterval(f.call.bind(f, this), 1000);

http://jsfiddle.net/Qx3jU/

虽然

,但这只是一种说法setInterval(f.bind(this), 1000);的坏方法

答案 2 :(得分:0)

因为您传递了 f.call值,所以您将失去与f的关联。

答案 3 :(得分:0)

From Mozilla Dev page

语法是:

var intervalID = window.setInterval(func, delay[, param1, param2, ...]);
var intervalID = window.setInterval(code, delay);

请注意,在第一种语法中将其他参数传递给函数在Internet Explorer中不起作用。如果要在该浏览器上启用此功能,则必须使用兼容性代码(请参阅Callback arguments paragraph)。

然后我建议你使用像这样的匿名函数

var x = this;
setInterval( function() { f.call(x); }, 1000 ); 

希望这有帮助。