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);