在Node.js中,我有以下代码:
console.log('starting');
function sayHello() {
console.log('HEllo!!');
}
setTimeout(() => {
console.log('inside of callback');
}, 1000);
console.log('finishing app');
为什么如果我通过终端运行(App)文件,它会显示setTimeout函数的结果,而不显示sayHello?毕竟,我也没有调用setTimeout函数! 此外,如果我将setTimeout函数存储在类似
的变量中var x = setTimeout(() => {
console.log('inside of callback');
}, 1000);
该函数也会自动调用!为什么?
答案 0 :(得分:1)
setTimeout的实现类似于(这只是一个模拟实现):
function setTimeout(callback, interval, ....args) {
// wait for `interval` time to pass
callback(...args);
}
如您所见,setTimeout
是一个将一个函数(在上例中为callback
)作为参数的函数,并在经过interval
时间后调用了该函数。 / p>
答案 1 :(得分:1)
此处没有与函数或方法的链接。关于declaration
和call
。
操作时:
function sayHello() {
console.log('HEllo!!');
}
您声明了不会调用的函数sayHello
。要调用它,您需要在声明它后执行sayHello();
。
使用setTimeout()
时,您正在通过JavaScript调用内置函数已声明。要知道如何使用已经声明的函数,您需要查看该函数的文档。示例:check here(部分语法)。
注意:JavaScript中的每个函数都附加到一个对象,因此每个函数都是一个方法。例如,setTimeout
附加到全局对象(在浏览器中为window
,在Node中为global
)。您的sayHello()
函数也将附加到其作用域。