javascript设置超时无效

时间:2017-11-18 07:19:46

标签: javascript

我希望下面的代码片段在每1秒暂停后打印出控制台日志。

但是代码片段会立即执行(打印100次,但),输出如下。

有人能告诉我我做错了吗?

enter image description here

let i = 0;
for (; i < 100; i++) {
  setTimeout(console.log("test"), 1000);
}
console.log('Loop Done');
console.log('Value of i ==>' + i);

2 个答案:

答案 0 :(得分:1)

正如我在评论中提到的那样,您正在立即调用node,并且console.log也是异步的,因此它是非阻塞的。

正确的方法之一是

setTimeout

答案 1 :(得分:1)

您实际上是为return console.log值设置超时,即undefined,而不是实际功能。

setTimeout需要function作为第一个参数才能使其正常工作。您已通过undefined。要解决这个问题,有两种方法。

传递一个调用console.log

的函数
setTimeout(function () {
  console.log("test");
}, 100);

在ES6中,这会短得多:

setTimeout(() => console.log("test"), 100);

将参数绑定到console.log

setTimeout(console.log.bind(undefined, "test"), 100);

bind() - 函数的参数就像告诉函数使用我们提供的参数执行一样。当您调用bind时,不会立即执行该函数,但会存储参数。

另外,作为旁注,我们为bind传递的第一个参数,即undefined,是函数的this值。我们不关心this的{​​{1}}值,我们只想传递console.log,我们将"test"写为undefined值。