callback && callback()理解
1、回调函数
let fn = new Function('arg1', 'arg2', 'return arg1 * arg2')
console.log(fn(2, 3)) // 6
由此可见,函数亦可以这样创建。代码上来看,就只是对象。这样做的一个好处,可以传递代码给其他函数,函数亦是对象。
function say(value) {
console.warn('alert-1', value); // hi js.
}
console.warn('alert-2', say); // fn()
say('hi js.')
只写变量名 say 返回的将会是 say方法本身,以字符串的形式表现出来。
而在变量名后加()如say()返回的就会使say方法调用后的结果,这里是弹出value的值。
2、再看一个例子
function say(value) {
alert(value);
}
function execute(someFunction, value) {
// console.warn(someFunction,value)
someFunction(value);
}
execute(say, 'hi js.');
上面第一段代码是将say方法作为参数传递给execute方法
function execute(someFunction, value) {
someFunction(value);
}
execute(function (value) { alert(value); }, 'hi js.');
第二段代码则是直接将匿名函数作为参数传递给execute方法
结论:
这里的say或者匿名函数就被称为回调函数!
如果还不懂,看看下面并不是很完美的比喻:
你到一个商店买东西,刚好你要的东西没有货,于是你在店员那里留下了你的电话,过了几天店里有货了,店员就打了你的电话,然后你接到电话后就到店里去取了货。
在这个例子里,你的电话号码就叫回调函数,你把电话留给店员就叫登记回调函数,店里后来有货了叫做触发了回调关联的事件,店员给你打电话叫做调用回调函数,你到店里去取货叫做响应回调事件。
3、callback && callback()理解
function a(callback) {
console.warn(callback)
console.log("我是parent函数a!");
console.log("调用回调函数");
callback&&callback();
}
function b() {
console.log("我是回调函数b");
}
function c() {
console.log("我是回调函数c");
}
function test() {
a(b);
a(c);
}
test()
结论:
(1)、当我们调用 test()函数,可以看到函数b、函数c均作为参数传递给函数a
(2)、函数a中,如果没有 callback() ,则callback虽然成功传参,但是只会执行函数a,并不会执行函数b、函数c
(3)、callback 相当于占位,但是如果没有 callback(),则不会调用。