为什么我们在 Node.js 中使用 setTimeout()函数?
setTimeout函数的目的是在一定的时间间隔后执行一段代码。 setTimeout()函数接受两个参数。第一个参数是一个函数,第二个参数是以毫秒为单位的时间。 setTimeout() 在第二个参数中指定的时间之后执行第一个参数中传递的函数。 setTimeout函数不会阻塞其他代码,其余代码将被执行,并在指定时间后执行 setTimeout函数中的代码。
句法:
setTimeout( function , time_in_milliseconds )
示例 1:在此示例中,定义了一个函数,然后将该函数作为 setTimeout()函数的第一个参数传递。第二个参数以毫秒为单位指定时间延迟,即3000。因此,函数内部的代码将在3000毫秒后执行,程序中的其余代码将被执行。
Javascript
Javascript
输出:
说明:在上面的代码中,setTimeout()函数里面的代码会被存储,下一条语句会被执行。在调用堆栈为空且经过指定时间后,将执行 setTimeout()函数中的代码。因此,上面的代码显示“立即打印”,然后等待 3 秒,然后显示“3 秒后打印”。
示例 2:下面给出了 setTimeout()函数的另一个示例。下面给出的示例代码很棘手。预计输出将是“立即打印”,后跟从 1 到 5 的数字。但代码不是这样工作的。这样做的原因是因为 setTimeout()函数将代码与所用数据的引用一起存储(在本例中为 i),并且只有在调用堆栈为空后才会执行。因此,对于 for 循环的每次迭代,setTimeout()函数都会存储代码。一旦等于 6,for 循环将终止。之后,将执行下一条语句,然后调用堆栈为空。在指定的时间延迟后,setTimeout()函数内的代码将执行。由于 i 的值现在已经等于 6,所以每次都会显示 6。
Javascript
输出:
说明:在上面的代码中,for 循环执行 i=1 到 i=5 的值,在每次迭代中,setTimeout()函数内部的代码将存储所用变量的引用(此处为 i)。当 i 的值变为 6 时,循环将终止。然后,将执行下一条语句。在调用堆栈变空并且每个 setTimeout()函数的指定时间过去后,每个 setTimeout函数内部的代码都会执行。因此,代码显示“立即打印”,然后在每一秒之后显示 i 的值,现在已变为 6。