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

时间:2021-01-12 01:49:14

标签: javascript callback settimeout

我想知道为什么这个简单的回调函数 (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

提前致谢

3 个答案:

答案 0 :(得分:1)

将其声明为稍后调用的函数:

const foo = function () {
    setTimeout(() => console.log('hello'), 2000);
}

setTimeout 的返回值是一个整数 Id 表示超时,后面可以和 clearTimeout() 一起使用;

例如

var t = setTimeout(() => console.log('hello'), 2000);
// clear the time out
clearTimeout(t);

答案 1 :(得分:0)

setTimeout 调用它。这就是它被称为回调的原因。 “调用”的另一个更常见的词是“调用”,因此回调基本上是调用回:稍后会有人调用您的代码。

这是一个接受回调的代码示例:

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

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

      console.log('foo');

   }
}

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

foo(function() { return true })

答案 2 :(得分:0)

你刚刚调用了带两个参数的函数并存储了setTimeout的返回结果

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

示例: 我有一个函数 setTimeout1

function setTimeout1(parm1, parm2){
  // do somthing
  return "Invoked";
}

const foo = setTimeout1(() => console.log('hello'), 2000);