如何在JavaScript中从内部调用匿名函数?

Ski*_*33k 1 javascript

是否可以重新运行函数'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);
  }
})();
Run Code Online (Sandbox Code Playgroud)

T.J*_*der 6

那么,你可以使用arguments.callee调用它,但它是一个坏主意,性能的下降,这是不是在严格模式下有效.

什么你引用的是有效的JavaScript和不应该check调用另外一个check功能,如果你有一个在它旁边.遗憾的是,它会在IE8及更早版本中因为它们错误地将名称泄漏check到周围的范围(命名函数表达式不会像函数声明那样将函数名称添加到周围的范围中 - 除了IE8和更早版本[并且不是全部他们错了他们]).

所以解决方案是使用匿名函数来隐藏命名函数:

(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);
      }
    }
})();
Run Code Online (Sandbox Code Playgroud)