簡體   English   中英

執行遞歸函數並保存回調

[英]Execute recursive function and save the callback

我有以下代碼。 它運行一個簡單的函數,並且需要運行相同的函數。 (遞歸)

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()..調用。 但這不是我的要求。 這可能嗎?

您應該在此處使用命名函數表達式

(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名稱不會在外部范圍內泄漏,並且可以在堆棧跟蹤中用於調試。

在這種情況下,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!");
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM