我很难理解如何在由$ interval调用的函数内处理值赋值。
鉴于以下代码:
this.value = null;
this.setSelection = function() {
this.value = Math.floor(Math.random()*11);
};
this.isSelected = function(item) {
if(this.value === item) {
return "selected";
}
};
如果我打电话以这种方式$interval(this.setSelection, 2000);
函数被称为所定义的间隔中的为setSelection,但是所分配的值的范围似乎是,使得实际this.value
没有改变,当摘要调用isSelected
时,值仍然是null
。
但是,如果我直接调用该函数(如不正确的形式)$interval(this.setSelection(), 2000);
值正确更新并且摘要运行isSelected
它会识别新值。很明显,由于$interval
预计会有函数参考,因此间隔不会再次运行。
我也试过在匿名函数中包装函数调用,但是这导致了一个错误,指出函数未定义。
所以我的问题是,为什么当我的函数被$ interval正确调用,我得到这个意外的结果?
有趣。我认为
this
应该在上下文中,因为$ interval是一个角函数,它在控制器内使用$ this调用一个函数。如果函数调用是从摘要产生的,还是以明确的方式绑定,那么“this”只会在上下文中出现? – msg45f 2015-04-05 09:43:02@ msg45f这与角度或摘要无关。这是一个JavaScript的东西。 'this'指的是封闭范围,当你传递一个函数需要的方法时,对象的上下文将会丢失,并且你会得到一个独立的函数,其中'this'意味着不同的东西。 – Sulthan 2015-04-05 10:38:41
我明白了。我的困惑之源是,在一个单独的控制器中,'ng-click'调用的方法在上下文中具有this,当它不是由'$ interval'调用的时候,我不确定出了什么问题。 – msg45f 2015-04-05 10:50:11