setTimeout与函数和无函数之间有什么区别?

问题描述:

如果我认为console.log是一个函数,那么在这两个之间有什么区别?setTimeout与函数和无函数之间有什么区别?

setTimeout(console.log('Test'), 1000); 

setTimeout(function(){ console.log('Test'); } , 1000); 

原因问这第二个电话后,立即正常1秒但第一个电话。

+1

您正在将'console.log'的调用结果传递给setTimeout – ASDFGerte

setTimeout的第一个参数需要一个函数。当您通过console.log('Test')时,它将评估console.log('Test') FIRST,并将结果传递到实际的超时过程。在你的情况,console.log('Test')实际上不返回的函数,所以评估时console.log('Test'),它将打印test到控制台,然后在1秒钟之后,什么也不做(因为你没有传递到setTimeout功能。

在第二你实际上传递一个函数为它在1秒钟后执行,它给你你想要的结果

你能想象的功能是这个样子:

function setTimeout(functionToCall, timeToWait) { 
    // Some waiting procedure based on timeToWait 
    functionToCall(); 
} 

免责声明这不是WH在功能上看起来像。

在第一种情况下,JS将首先调用console.log('Test'),并将结果undefined转换为setTimeout。这导致它立即被打印。在第二种情况下,整个函数将被传递到setTimeout而不首先被评估。