当我像这样使用setTimout调用函数时:
function f2() { console.log("hey"); }
setTimeout("f2()", 3000);
运行完美。
但是当我将所有内容包装在函数f1中时,如下所示:
function f1() {
function f2() { console.log("hey"); }
setTimeout("f2()", 3000);
}
f1();
我收到一条错误消息:f2未定义。 为什么会发生这种情况,我该如何解决?
答案 0 :(得分:4)
setTimeout是一个异步调用。这将允许其余代码继续执行,直到达到延迟为止。如果传递的值是字符串,则必须进行评估,例如$('#boxchatting').load('result.php', function(){
$('#loadmore').prependTo(this)
});
。但是因为代码已经通过,所以eval("f2()")
函数不再在可见范围内,因此无法找到。
直接使用函数引用而不是使用字符串
f2
演示
setTimeout(f2,3000)