我试图通过简单地创建一个使用两个数字并具有返回数组中最后一项的回调的函数来学习回调函数。我是一名自学成才的网络开发人员,因此,如果可能的话,我希望一些专家对我进行教育。
这是我的代码
const items = ['Pencil', 'Notebook', 'yo-yo', 'Gum'];
function last(arr, cb) {
// last passes the last item of the array into the callback.
// console.log(arr.pop())
return cb(arr[arr.length - 1])
}
last(items, cb)
我的错误是:未捕获的TypeError:cb不是函数
答案 0 :(得分:2)
如果要使用回调 cb
,则需要对其进行定义。像这样
const items = ['Pencil', 'Notebook', 'yo-yo', 'Gum'];
const cb = x => {
console.log('last item is:', x);
return x;
}
function last(arr, cb) {
return cb(arr[arr.length - 1])
}
last(items, cb);
答案 1 :(得分:0)
您需要创建一个回调。使用以下代码:
const items = ['Pencil', 'Notebook', 'yo-yo', 'Gum'];
function last(arr, cb) {
// last passes the last item of the array into the callback.
// console.log(arr.pop())
return cb(arr[arr.length - 1]);
}
last(items, e => { console.log(e) });
答案 2 :(得分:0)
回调是 function ,它作为参数传递给另一个函数,并从其中调用以继续执行程序。您在代码中缺少该回调函数。这很简单。
现在,您的问题中的这句话需要做更多的工作:
具有两个数字并具有返回最后一项的回调的函数
对于诸如您的示例这样的示例,其中不涉及异步进程……
const items = ['Pencil', 'Notebook', 'yo-yo', 'Gum'];
function last(arr, cb) {
const el = arr[arr.length - 1];
return cb(el);
}
const lastItem = last(items, function print(el) {
return `Last element is ${el}`;
});
console.log(lastItem);
...但是通常您会看到,回调主要用于在异步进程运行后继续执行代码流,并且在这种情况下您无法从回调返回值
例如,在此示例中,我们使用setTimeout
将调用回调延迟2秒:
const items = ['Pencil', 'Notebook', 'yo-yo', 'Gum'];
function last(arr, cb) {
const el = arr[arr.length - 1];
setTimeout(() => {
cb(el);
}, 2000);
}
last(items, function print(el) {
console.log(`Last element is ${el}`);
});
我们没有返回任何内容,因为返回setTimeout
没有意义,也没有从setTimeout
内的 返回回调。取而代之的是,我们使用2秒后的值调用回调,并将字符串记录到控制台。
这意味着我们无法像在第一个示例中对lastItem
那样返回变量的值,以及"How do I return the response from an asynchronous call"可能是该站点上链接最多的问题的原因,并且了解这一点对理解回调很重要。
因此,当您可以从回调返回值时,通常会使用使用它们在异步过程之后继续执行程序。
希望有帮助。