JavaScript:如何从匿名函数返回值

4

在这段代码中,我该如何获取var result的值?

我知道这是一个基础问题,但是我已经寻找解决方案三天了。请给我一些建议好吗?

function foo(myCallback){
}

function bar() {
    var result = foo(function(){
        var result = "hello"; 
        return result;
    });
}

var showResult = bar();
alert(showResult);

你可以在callback中获取它。 - Rayon
function foo(myCallback) { } function bar(cb) { foo(function() { var result = "hello"; cb(result); }); } bar(function(res) { alert(res); }); - Rayon
3个回答

6

你需要调用回调函数并返回它的值,在你的bar函数内部,也需要返回结果。

function foo(myCallback){
    // return the value of the call myCallback()
    return myCallback();
}

function bar(){
    var result = foo(function(){
        var result = "hello"; 
        return result;
    });
    // return the result
    return result;
}
var showResult = bar();
alert(showResult);

有点简化的话,它可能是这样的

function foo(myCallback){
    return myCallback();
}

function bar(){
    return foo(function(){
        return "hello"; 
    });
}
var showResult = bar();
alert(showResult);


你甚至可以简单地用return本身来替换最初的var result声明。实际上,在这种情况下,所有的var result = ...; return result;都可以用return ...来替代。 - somethinghere
1
非常感谢Nina Scholz,这是一个好答案! :-) 很高兴看到你的第一个答案与我的问题相同。然后我可以看到一个简化版本。谢谢! - zm455
1
@zm455 你应该能够在自己的问题上投票,并且当然可以将自己问题的答案标记为正确的 :) - somethinghere
你好,@somethingThere。StackOverflow的系统告诉我不能为自己的帖子投票。我很乐意为帮助过我的人投票。我只需要两个人的投票就可以获得15点声望,这是我能够接受答案和投票所需的分数。 - zm455
请看这里:http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work - Nina Scholz
显示剩余3条评论

2

你缺少返回语句。不清楚你想要返回什么。

它的工作原理如下:

function foo(myCallback){
  return myCallback();
}

function bar(){
    var result = foo(function(){
        var result = "hello"; 
        return result;
    });
  return result;
}
var showResult = bar();
alert(showResult);

0

你正在使用回调函数,但幸运的是你可以在回调函数中传递参数:

// define your functions
function foo(myCallback){
    myCallback();
}

function bar(callback){
    var result = foo(function(){
        var result = "hello"; 
        callback(result);
    });
}

// now run it
bar(function(showResult){
    alert(showResult);
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接