我想知道为什么这个简单的回调函数 (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
提前致谢
答案 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);