提问人:whoam_i24 提问时间:5/16/2023 最后编辑:whoam_i24 更新时间:5/16/2023 访问量:107
什么是 Javascript 中的回调?[复制]
What is a callback in Javascript? [duplicate]
问:
MDN 表示,回调是一个作为参数传递给另一个函数的函数。据我了解,这意味着回调包含在括号中。这是链接。
但是,我曾经在 Freecodecamp 上看到一篇文章,说回调是 MDN 类似描述的函数,而回调函数是包含在另一个功能块中的函数。这意味着回调函数充当子函数。
是我错了,还是这两个来源之间有一些混淆?
答:
回调是作为参数传递给另一个函数的任何函数,旨在回调,在接收器函数内的某个位置调用。其余的就不那么重要了。您可以将函数分配给变量并将变量作为回调传递,因为在 JS 函数中是第一类对象,即类/函数的实例。Function
在另一个函数的作用域内定义的函数称为闭包
function outer() {
let str1 = "Hello, "
return function inner() {
return str1 + "world!"
}
}
console.log(outer()())
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures
作为参数传递给另一个函数的函数称为回调
https://developer.mozilla.org/en-US/docs/Glossary/Callback_function
function one() {
return " world!"
}
function two(callback) {
return "hello" + callback()
}
console.log(two(one))
更新
不要太担心术语,这里的关键要点应该是
- 函数是 Javascript 中的第一类对象(了解更多)
- 周围范围和闭包的工作原理
评论
这个词的意思是某个函数将在某个时间点被某些代码回调。这个词没有指定或表示如何定义回调函数的方式。callback
callback
通常,回调是作为参数传递给另一个函数的函数。回调函数的主体可以驻留在全局作用域中,也可以驻留在其他函数或类方法中。
例如:
const callback = () => console.log('Hello, world');
setTimeout(callback, 1000);
在这种情况下,回调的主体在全局空间中定义,并作为参数传递给 。setTimeout
第二种选择:
const startMyTimer = () => {
const callback = () => console.log('Hello, world');
setTimeout(callback, 1000);
};
在这种情况下,回调在另一个函数的主体中定义,并作为参数传递给 。startMyTimer
setTimeout
第三种选择:
const startMyTimer = () => {
setTimeout(() => console.log('Hello, world'), 1000);
};
在这里,回调的主体在函数调用中声明,并作为参数传递到函数调用中。setTimeout
数组示例:
const callbacks = [
() => console.log('hello'),
() => console.log('world'),
];
callbacks.forEach((cb) => cb());
此示例演示回调不一定需要作为参数传递,也可以存储在变量或数组中。
保存的回调场景,基于 @slebetman 的评论:
class MyObject {
constructor() {
this.callback = null;
}
runIt() {
// do some work here
// ...
// and then call the callback
this.callback();
}
}
const obj = new MyObject();
obj.callback = () => console.log('Hello, world!');
obj.runIt();
这表明回调可以保存为对象的字段,然后在完成一些工作后执行。
如果有帮助,请告诉我。
评论
pdfCompiler
pdfCompiler.afterCompile = (x) => {console.log(x)}
pdfCompiler.compile()
上一个:了解回调函数
评论