Javascript 为什么即使我从未调用过回调函数也会被调用?

Javascript 为什么即使我从未调用过回调函数也会被调用?,javascript,callback,settimeout,Javascript,Callback,Settimeout,我想知道为什么这个简单的回调函数(setTimout)会被调用,即使我没有调用,只是分配了它 在这段代码中,我将setTimeout函数分配给变量foo 所以我认为返回值应该存储在变量foo中 它不需要执行并打印“hello”,因为我没有调用该函数 但为什么它会被呼叫并打印“你好”??如果我只想将其赋值并存储到变量呢 这个函数如何可以是数字类型,返回值是2 const foo = setTimeout(() => console.log('hello'), 2000); // hello

我想知道为什么这个简单的回调函数(setTimout)会被调用,即使我没有调用,只是分配了它

在这段代码中,我将setTimeout函数分配给变量foo

所以我认为返回值应该存储在变量foo中

它不需要执行并打印“hello”,因为我没有调用该函数

但为什么它会被呼叫并打印“你好”??如果我只想将其赋值并存储到变量呢

这个函数如何可以是数字类型,返回值是2

const foo = setTimeout(() => console.log('hello'), 2000);
// hello ( after 2 seconds )

console.log(typeof foo);
// number

console.log(foo);
// 2

提前感谢

设置超时
调用它。这就是为什么它被称为回拨。“invoke”的另一个更常见的词是“call”,所以回调基本上是一个invokeback:稍后会有人调用您的代码

下面是接受回调的代码示例:

function foo (cb) {
   // this function prints "foo" if callback returns true

   if (cb()) { // foo() invoking cb()!

      console.log('foo');

   }
}
如您所见,编写函数的程序员就是调用您的函数的人。您只需定义他们将调用的函数:

foo(function() { return true })

要将其声明为稍后调用的函数,请执行以下操作:

const foo = function () {
    setTimeout(() => console.log('hello'), 2000);
}
setTimeout的返回值是超时的整数Id,稍后可与clearTimeout()一起使用

e、 g


您只需使用两个参数调用函数并存储setTimeout的返回结果

constfoo=setTimeout(()=>console.log('hello'),2000)//
示例: 我有一个函数setTimeout1

函数setTimeout1(parm1、parm2){
//干坏事
返回“已调用”;
}
constfoo=setTimeout1(()=>console.log('hello'),2000);

立即调用setTimeout,并将超时的ID分配给foo。您可能在设置超时之前忘记了
()=>
。您应该更仔细地阅读文档。请注意,
setTimeout
的返回值是超时的id。在大多数浏览器中,它通常被实现为一个数字,但不一定是一个数字。例如,Node.js返回一个表示超时的复杂对象
var t = setTimeout(() => console.log('hello'), 2000);
// clear the time out
clearTimeout(t);