为什么Javascript使用setTimeout函数sync和async显示输出?
(变量i=2;i>=1;i--)的为什么Javascript使用setTimeout函数sync和async显示输出?,javascript,node.js,Javascript,Node.js,(变量i=2;i>=1;i--)的{ 设置超时(功能(i){ 控制台日志(i); },1000); 控制台日志(“hii”); }因为您在那里调用了print函数,所以它没有作为回调传递。在这种情况下,它将完成print函数的执行,然后将返回值作为第一个参数传递给setTimeout 这就是您正在尝试的:- for(var i = 2;i >= 1;i--) { setTimeout(print(i),5000); console.log("hii"); } function pr
{
设置超时(功能(i){
控制台日志(i);
},1000);
控制台日志(“hii”);
}
因为您在那里调用了print
函数,所以它没有作为回调传递。在这种情况下,它将完成print
函数的执行,然后将返回值作为第一个参数传递给setTimeout
这就是您正在尝试的:-
for(var i = 2;i >= 1;i--) {
setTimeout(print(i),5000);
console.log("hii");
}
function print(i) {
return function(){console.log(i)}
}
在第一个示例中,您正在将一个函数传递给setTimeout,该函数只接受一个参数,
i
,但setTimeout在调用该函数时不会向该函数(或就此而言的任何函数)传递任何参数。因此,i
在该函数中未定义,因此,undefined
被输出
在第二个示例中,调用print,并将结果传递给setTimeout。但是print会立即执行,所以这就是为什么每次迭代“hii”之前都会输出一个数字。
(变量i=2;i>=1;i--)的{
设置超时(功能(i){
控制台日志(i);
},1000);
控制台日志(“hii”);
}
在循环时执行打印(i)
。它不返回函数(回调)。您需要运行setTimeout(functionname或匿名函数)
notsetTimeout(somefunction())