我想像许多人一样将代码分发为具有自我吸引力的匿名函数。另外,在我的代码中,我必须监视另一个库加载,因此可以在可用时使用它。
(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/上的演示