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