我想像许多人一样将代码分发为具有自我吸引力的匿名函数。另外,在我的代码中,我必须监视另一个库加载,因此可以在可用时使用它。

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

如何发生此错误? initMyLib是否应包含在封闭(自激活)功能的范围内?

最佳答案

setTimeout("initMyLib()", 50);更改为setTimeout(initMyLib, 50);
当您将字符串作为参数传递时,它将在超时时尝试评估它,但是它将在全局范围内运行。而且您的方法不在全局范围内。

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

08-19 17:46