0

可能重复:
setInterval() 只运行一次函数

我正在使用以下脚本来理解函数上下文的概念。我排除了从 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);它可以正常工作并一次又一次地重复。有什么问题?

4

1 回答 1

9

someFuncObject.call(o2)实际调用函数。这意味着,传入setInterval的是从someFuncObject(). setInterval期望作为参数的是函数本身,而不是函数返回的内容。

如果要控制thisinside的值someFuncObject,可以使用匿名函数,例如:

window.setInterval(function() {
    someFuncObject.call(o2);
}, 2000);
于 2013-01-27T16:20:38.737 回答