关于设置超时/间隔上下文

About setTimeout/Interval context

本文关键字:上下文 超时 于设置 设置      更新时间:2023-09-26

为什么我不能这样做:

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

使用.bind而不是.call

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

试试这个:

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

http://jsfiddle.net/Qx3jU/

不过,这只是一种不好的说法setInterval(f.bind(this), 1000);

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

来自 Mozilla Dev 页面

语法为:

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

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

那我建议你使用这样的匿名函数

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

希望这有帮助。