执行递归函数并保存回调

时间:2015-05-12 14:43:59

标签: javascript node.js

我有以下代码。它运行一个简单的功能,需要运行相同的功能。 (递归)

var Skit = function(callback) {
    validSkit(Math.random(),function(skit,data){
        // Ajax callback
        if (skit == true) callback(data); // Works if skit is found
        else if (skit == false) Skit(callback); // Call Skit again [not working]
    });
}(function(skit){
    console.log("Valid skit found!");
});

我得到Skit is undefined!我知道我可以做这个真正简单的function Skit()..电话。但这不是我的要求。这可能吗?

2 个答案:

答案 0 :(得分:2)

您应该在此处使用命名函数表达式

(function Skit(callback) {
    validSkit(Math.random(),function(skit,data){
        // Ajax callback
        if (skit == true) callback(data); // Works if skit is found
        else if (skit == false) Skit(callback); // Call Skit again [not working]
    });
})(function(skit){
    console.log("Valid skit found!");
});

请注意,Skit名称不会在外部作用域中泄漏,并且可以在堆栈跟踪中进行调试。

答案 1 :(得分:0)

在这种情况下,var Skit变量是返回值。

(function (callback) {
...
})(function () {console.log('I am argument function')}); 

如果你从中返回了smth(在执行validSkit之后,例如,之前或之前),那么Skit的值将是返回值。至于return语句不存在,它默认返回undefined。

因此,首先需要在不调用函数的情况下启动函数,然后按名称调用它:

 var Skit = function(callback) {
    validSkit(Math.random(),function(skit,data){
        // Ajax callback
        if (skit == true) callback(data); // Works if skit is found
        else if (skit == false) Skit(callback); // Call Skit again [not working]
    });
};

Skit(function(skit){
    console.log("Valid skit found!");
});