setTimeout()在自调用函数中的递归函数

use*_*722 5 javascript closures anonymous-function settimeout

我想将我的代码分发为一个自我唤起的匿名函数,正如我看到许多人所做的那样.此外,在我的代码中,我必须监视另一个lib加载,所以我可以在它可用时使用它.

(function(window, document, undefined) {
  staffHappens();
  var initMyLib = function() {
    if (typeof(myLib) == 'undefined') {
      setTimeout("initMyLib()", 50);
    } else {
      useMyLib();
    }
  }
  moreStaffHappens();
  initMyLib(); //-> initMyLib is undefined
})(this, document);
Run Code Online (Sandbox Code Playgroud)

这个错误怎么会发生?initMyLib应该在封闭(自我调用)函数的范围内吗?

Gab*_*oli 12

改变setTimeout("initMyLib()", 50);setTimeout(initMyLib, 50);

当您将字符串作为参数传递时,它将尝试在触发超时时对其进行评估,但它将在全局范围内运行.并且您的方法在全局范围内不存在.


演示 http://jsfiddle.net/gaby/zVr7L/