范围问题,我认为函数语句始终悬挂在当前上下文的顶部。那么,为什么在下面未定义'hideNav()'?

var t;


function showNav(bflag){
clearTimeout(t);
if(bflag===true){
    $("#tS2").stop(false,false).animate({
                'bottom':'0'
            }, 1000);
}else{

    t=setTimeout("hideNav()",1000);

}
}

function hideNav(){
$("#tS2").stop(true,false).animate({
                'bottom':'-125px'
            }, 1000);
}

最佳答案

更改,

setTimeout("hideNav()",1000);




setTimeout(hideNav, 1000);


hideNav仅在当前上下文中定义,但是您正在将字符串传递给setTimeout。在全局对象的上下文中发生超时时,将评估该字符串。由于您的hideNav函数未在全局对象中定义,因此它将引发异常。

通过直接将对函数的引用传递给setTimeout,您不必担心。

关于javascript - 具有setTimeout的Javascript范围问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10150350/

10-08 22:24