如果我认为控制台.log是一个函数,那么遵循这两个有什么区别?
setTimeout(console.log('Test'), 1000);
和
setTimeout(function(){ console.log('Test'); } , 1000);
询问第二个呼叫的原因在 1 秒后正确,但第一个呼叫立即。
setTimeout
的第一个参数需要一个函数。当您传入console.log('Test')
时,它将首先评估console.log('Test')
,并将结果传递到实际的超时过程中。在您的情况下,console.log('Test')
实际上并没有返回函数,因此在评估console.log('Test')
时,它会test
打印到控制台,然后在 1 秒后,不执行任何操作(因为您没有向setTimeout
函数传递任何内容。
在第二秒中,您实际上传递了一个函数,让它在 1 秒后执行,这给了你想要的结果。
你可以想象这个函数看起来像这样:
function setTimeout(functionToCall, timeToWait) {
// Some waiting procedure based on timeToWait
functionToCall();
}
免责声明这不是函数的实际外观。
在第一种情况下,JS会先调用console.log('Test')
,并将结果undefined
传递给setTimeout
。这导致它立即被打印出来。在第二种情况下,整个函数被传递到setTimeout
中,而不先求值。