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/