执行recursion函数并保存callback

我有以下代码。 它运行一个简单的function,需要运行相同的function。 (recursion)

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()..调用。 但这不是我的要求。 这可能吗?

你应该在这里使用一个命名函数expression式

 (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名称不会在外部作用域中泄漏,并且可用于堆栈跟踪中的debugging。

在这种情况下,var Skitvariables是返回的值。

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

如果你从它返回smth(在validSkit执行之后,对于exampe,或之前,无论),那么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!"); });