函数范围javascript,返回函数外部

时间:2012-03-12 04:27:23

标签: javascript redis

我在JS中有这个功能:

 function redGet(key){
    var response;
    red.get(key, function (err, reply) {
            response = reply;
        });
    return response;
    }

这将继续返回undefined:

console.log(redGet("hello"));

4 个答案:

答案 0 :(得分:2)

假设red.get()是一个类似AJAX的异步函数,问题是你期望它同步运行。在异步操作完成之前,您将无法获得reply值,这意味着必须在回调函数中调用任何依赖于此值的值。

例如:

function redGet(key){
    red.get(key, function (err, reply) {
        // do whatever you need to do with the reply value here
        console.log(reply);
    });
}

redGet("hello");

答案 1 :(得分:0)

您没有说red是什么,但很可能它的.get()方法是异步,这意味着redGet()的执行会立即继续return response 1}}此时值 未定义。只有在.get()完成处理后,才会执行回调函数以设置response - reply

与任何异步代码(也可在Ajax,数据库访问等代码中找到)一样,您可能需要重新构建代码,以便在回调函数中执行依赖于.get()的返回值的任何代码(或者从回调中调用的其他函数。)

答案 2 :(得分:0)

我猜你的red.get是一个ajax函数调用(它是异步的)

console.log(..)red.get(..)获得结果之前执行redGet('hello', function(res) { alert(res) }) // then in your code function redGet(key, cb){ red.get(key, function (err, reply) { cb(reply) }); } 会发生什么。

如果您仍然希望它能够正常工作,您必须将回调传递给它,例如

{{1}}

答案 3 :(得分:0)

您可以在async:false选项中使用jquery $ .ajax函数。可能是红色变量里面使用了jquery $ .ajax函数,你可以这样做。但它会影响性能。 有关http://api.jquery.com/jQuery.ajax/

的更多信息