settimeout没有延迟

我写了一个小脚本,很好奇为什么控制台立即记录所有值而不是延迟输出直到满足超时…

JS:

var test_obj = { init: function(i) { if (i < 10000) { console.log(i + "
"); i = i+i; setTimeout(test_obj.init(i), i); } } }; $(document).ready(function() { var i = 1; test_obj.init(i); });

那是因为,您没有将函数引用传递给超时。 而是通过使用parens ()调用它来立即调用它。 setTimeout(test_obj.init(i), i); 现在,这将调用函数并将函数的返回值设置为引用,此处未定义,因为您不返回任何内容。

而是尝试这种方式:

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

小提琴

另一种方法是使用function.bind

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

小提琴

因为你正在调用该函数。 您应该将函数指针传递给setTimeout而不执行该函数。

 setTimeout(function(){ test_obj.init(i) }, i);