我使用以下脚本来理解函数上下文的概念。我从20日开始提醒并重复提醒。但是在显示20之后它就相当了。 当使用call方法并提供o2时,它应该得到值20并从那里重复。
<script type="text/javascript">
var o2 = {
local: 20
}
var local=0;
function someFuncObject(){
alert('Thats method object again ' + this.local++);
}
// window.setInterval(someFuncObject, 2000); //This works perfect!!!
window.setInterval(someFuncObject.call(o2), 2000); // This does not, why?
</script>
另一方面,如果我使用window.setInterval(someFuncObject, 2000);
,它可以正常工作并一次又一次地重复。问题是什么?
答案 0 :(得分:9)
someFuncObject.call(o2)
实际上调用了该函数。这意味着,传递到setInterval
的内容是someFuncObject()
返回的内容。 setInterval
期望参数是函数本身,而不是函数返回的内容。
如果要控制this
内someFuncObject
的值,可以使用匿名函数,如:
window.setInterval(function() {
someFuncObject.call(o2);
}, 2000);