0

重複の可能性:
setInterval() は関数を 1 回だけ実行する

関数コンテキストの概念を理解するために、次のスクリプトを使用しています。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 に答える