我有以下代码。它运行一个简单的功能,需要运行相同的功能。 (递归)
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()..
电话。但这不是我的要求。这可能吗?
答案 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!");
});