1

私は小さなスクリプトを書きましたが、タイムアウトが満たされるまで出力を遅らせるのではなく、コンソールがすべての値をすぐにログに記録する理由について興味があります...

JS:

var test_obj = {
    init: function(i) {
        if (i < 10000) {
            console.log(i + "<br />");
            i = i+i;
            setTimeout(test_obj.init(i), i);
        }
    }
};

$(document).ready(function() {
    var i = 1;
    test_obj.init(i);
});
4

2 に答える 2

3

関数を呼び出しているからです。関数ポインタを setTimeout に渡し、関数を実行しないでください。

setTimeout(function(){
    test_obj.init(i)
}, i);
于 2013-07-05T05:09:11.903 に答える
2

これは、関数参照をタイムアウトに渡していないためです。代わりに、 parens を使用して呼び出すことにより、すぐに呼び出し()ます。setTimeout(test_obj.init(i), i);これで関数が呼び出され、関数の戻り値が参照として設定されます。ここでは、何も返さないため未定義です。

代わりに、次の方法を試してください。

 init: function(i) {
        if (i < 10000) {
            console.log(i + "<br />");
            i = i+i;
            setTimeout(function(){ // Do this way
                 test_obj.init(i); 
             }, i);
        }

フィドル

これを行う別の方法は、function.bindを使用することです。

  setTimeout(test_obj.init.bind(this, i), i);

フィドル

于 2013-07-05T05:09:27.567 に答える