是否可以重新运行'check'函数而不在else语句中调用check()?也许以某种方式打电话给自己?
如果我有这个函数的多个实例,它们最终会相互调用,除非我将它更改为check1,check2等。虽然这是可能的。作为一个性能杀手,我只是在试用原型应用程序。
(function check () {
if (typeof foo !='undefined') {
// do stuff
} else {
console.log("Failed to load, trying again");
setTimeout(function(){ check(); }, 10);
}
})();
答案 0 :(得分:6)
好吧,你可以使用arguments.callee
来调用它,但这是一个坏主意,性能损失,并且在严格模式下无效。
您引用的内容是有效的JavaScript,不应让check
调用另一个check
函数,如果您有一个check
函数。遗憾的是,it will in IE8 and earlier因为他们错误地将名称(function() {
// A check function
check();
function check () {
if (typeof foo !='undefined') {
// do stuff
} else {
console.log("Failed to load, trying again");
setTimeout(function(){ check(); }, 10);
}
}
})();
(function() {
// A complete different one
check();
function check () {
if (typeof foo !='undefined') {
// do other stuff
} else {
console.log("Failed to load, trying again");
setTimeout(function(){ check(); }, 10);
}
}
})();
泄漏到周围的范围(命名函数表达式)不会像函数声明那样将函数名称添加到周围的范围中 - 除了IE8及更早版本[并不是所有人都错了]。
所以解决方案是使用匿名函数隐藏命名函数:
{{1}}
答案 1 :(得分:3)
如何使用间隔而不需要调用自身,因为这将自动完成,直到您清除间隔:
(function(){
var interval = setInterval(function(){
if(typeof foo != 'undefined'){
clearInterval(interval);
// do stuff
}else{
console.log("Failed to load, trying again");
}
},10)
})();
答案 2 :(得分:0)
为什么不这样做呢:
var inter;
function check() {
if (typeof foo !== 'undefined') {
clearInterval(inter);
// do stuff
} else {
console.log("Failed to load, trying again");
}
}
inter = setInterval(check, 10);
这不是替代品,但我认为它的风格更好。