大家好,希望大家都做得好,
这是我的代码,具有名称和回调的功能 以名称为回调函数以返回名称并用console.log记录
如果我
function doSomething(name,callback) {
callback(name);
}
function foo(n) {
return n;
}
var val = doSomething("TEST",foo);
console.log(val);
我不确定。
如果我
function doSomething(name,callback) {
callback(name);
}
function foo(n) {
console.log(n);
}
var val = doSomething("TEST",foo);
正常运行,并在console.log中输入TEST名称。
那为什么退货不起作用?
谢谢
答案 0 :(得分:2)
您的doSomething()
函数不返回任何内容,这意味着使用该函数的赋值为undefined
。但是,这实际上并不是问题所在。
潜在的问题是,您似乎在这里混合了两种不同的数据处理模式:如果要编写纯同步代码,请使用返回函数(立即返回一些值)。如果需要异步代码,请使用回调(“最终”将执行某些操作)。混合这两种模式是解决问题和挫败感的秘诀:
要么:
val
做的所有事情。情况1:
function doSomething(data, processor) {
return processor(data);
}
function passThrough(v) { return v; }
var val = doSomething("test", passThrough);
// immediately use "val" here in for whatever thing you need to do.
情况2:
function doSomething(data, callback) {
// _eventually_ a callback happens - for instance, this
// function pulls some data from a database, which is one
// of those inherently asynchronous tasks. Let's fake that
// with a timeout for demonstration purposes:
setTimemout(() => callback(data), 500);
}
function handleData(val) {
// use "val" here in for whatever thing you need to do. Eventually.
}
doSomething("test", handleData);
如果要处理第2种情况,您真的想看看现代Javascript中的“ Promises”和async / await,它们是基于“一旦有什么事情要回呼就回叫”的思想的高度改进的方法。回拨一下。”
答案 1 :(得分:0)
为了分配函数的返回值/对象(在本例中为doSomething
,它应该有一个return语句。否则该函数不返回任何内容,因此当您将其分配给val
时,它将仍然是undefined
。
因此,您可以这样修改代码:
function doSomething(name,callback) {
return callback(name);
}
function foo(n) {
return n;
}
var val = doSomething("TEST",foo);
console.log(val);
答案 2 :(得分:0)
undefined
。
调用var val = doSomething("TEST",foo)
时,您正在将doSomething的返回值与val对齐(未定义)。
function doSomething(name,callback) {
return callback(name);
}
function foo(n) {
return n;
}
var val = doSomething("TEST",foo);
console.log(val);
答案 3 :(得分:0)
function doSomething(name,callback) {
callback(name);
}
function foo(n) {
console.log(n);
return n;
}
var val = doSomething("TEST",foo);
看看上面的代码。当您调用doSomething(在内部执行foo)时,它将在控制台上打印,因为那就是console.log的用途。但是,在此语句之后,它也返回n,然后在doSomething中接收到该n。但是它没有被退还。简而言之,您主要要做的是
function doSomething(name,callback) {
const returnValue = callback(name);
}
如果调用上述方法,它将返回未定义。要使其返回正确的值,您必须调用“ return returnValue” 。类似,你必须说 返回回调(名称)
希望这会有所帮助。
学习愉快