我的代码如下:
function foo(){
$('div').each(function(){
//here $(this) refers to selected div
});
});
现在,当我在setInterval中调用foo时,$(this)
不会引用each()方法的div:
setInterval(function(){
foo();
},5000);
我尝试使用bind():
setInterval(function(){
foo();
}.bind(this),5000); //or bind(document.querySelectorAll('div'))
我确实错误地引用了div $(this)
。我该怎么办?
以下是我未定义的证据:
答案 0 :(得分:1)
假设您希望each
回调中的代码能够访问this
调用后setInterval
调用的任何值,那么您的代码有两个问题。
首先,您不是bind
foo
本身。代码
setInterval(function(){
foo();
}.bind(this),5000);
成功将this
绑定到匿名函数function() { foo(); }
。然后,此匿名函数直接调用foo
,它(在非严格模式下)为调用全局对象this
或window
设置global
,任何直接函数调用都会发生。
您需要使用this
或foo
明确地将匿名函数call
传递给匿名函数内的apply
调用:
setInterval(function(){
foo.call(this);
}.bind(this),5000);
既然foo
有正确的this
,您需要在this
回调中访问each
值。为此,您可以参考How to access the correct `this` context inside a callback?,它将指示您将外部this
存储在另一个变量中。您只需将this
存储在另一个变量中,并在内部回调中使用该变量而不是this
:
function foo() {
var outer_this_from_foo = this;
$('.rsContent').each(function(){
//here $(this) refers to selected div
//but outer_this_from_foo refers to the `this` value just outside this callback
var fI = $('>.img-responsive', outer_this_from_foo);
// instead of $('>.img-responsive', this)
});
};