Javascript 设置超时不';我好像没有调用这个函数

Javascript 设置超时不';我好像没有调用这个函数,javascript,settimeout,Javascript,Settimeout,在我添加setTimeout之前,代码运行得非常好。现在,无论我如何尝试调用setTimeout(setTimeout(function(){fadeOut()},1000);setTimeout(“fadeOut()”,1000);等)中的函数,它似乎根本无法访问函数 我是一名Javascript新手,非常感谢您的任何帮助=] javascript代码: var slideArray = ["slide1","slide2","slide3","slide4","slide5","slide6

在我添加setTimeout之前,代码运行得非常好。现在,无论我如何尝试调用setTimeout(
setTimeout(function(){fadeOut()},1000);
setTimeout(“fadeOut()”,1000);
等)中的函数,它似乎根本无法访问函数

我是一名Javascript新手,非常感谢您的任何帮助=]

javascript代码:

var slideArray = ["slide1","slide2","slide3","slide4","slide5","slide6"];
var currentSlide = null;
var current = null;
var done = false;

function fade(newSlide)
{
    if(currentSlide === null)
    {
        currentSlide = slideArray[0];
        document.getElementById(currentSlide).style.opacity = 1.0;

        for(var i=1;i<slideArray.length;i++)
            document.getElementById(slideArray[i]).style.opacity = 0.0;
    }

    current = document.getElementById(currentSlide);
    done = false;
    do
    {
        window.setTimeout(fadeOut,1000);
    } while(done == false);

    currentSlide = newSlide;
    current = document.getElementById(currentSlide);
    done = false;

    do
    {
        window.setTimeout(fadeIn,1000);
    } while(done == false);
}

function fadeOut()
{
    if(parseFloat(current.style.opacity)-0.1>.0000001)
    {
    current.style.opacity = parseFloat(current.style.opacity) -0.1;
        done = false;
    }
    else
    {
        current.style.opacity = 0.0;
        done = true;
    }
}

function fadeIn()
{
    if(0.9-parseFloat(current.style.opacity)>.0000001)
    {
        current.style.opacity = parseFloat(current.style.opacity)+0.1;
        done = false;
    }
    else
    {
        current.style.opacity = 1.0;
        done = true;
    }
}
var slideArray=[“slide1”、“slide2”、“slide3”、“slide4”、“slide5”、“slide6”];
var currentSlide=null;
无功电流=零;
var done=false;
功能淡入淡出(newSlide)
{
如果(当前幻灯片===null)
{
currentSlide=slideArray[0];
document.getElementById(currentSlide).style.opacity=1.0;
对于(var i=1;i.0000001)
{
current.style.opacity=parseFloat(current.style.opacity)-0.1;
完成=错误;
}
其他的
{
current.style.opacity=0.0;
完成=正确;
}
}
函数fadeIn()
{
if(0.9-parseFloat(当前.style.opacity)>.0000001)
{
current.style.opacity=parseFloat(current.style.opacity)+0.1;
完成=错误;
}
其他的
{
current.style.opacity=1.0;
完成=正确;
}
}

请记住,javascript是单线程的,因此在完成当前脚本的运行之前,不会调用setTimeout'et函数。这是永远不会发生的,因为您处于一个永远不会结束的循环中(直到所有setTimeout的内存都用完)。只需调用setTimeout一次,然后让函数返回。忘记等待它发生的想法。

记住javascript是单线程的,因此在完成当前脚本的运行之前不会调用setTimeout'et函数。这永远不会发生,因为您处于一个永远不会结束的循环中(直到所有这些setTimeout的内存都用完)。只需调用setTimeout一次,让函数返回。忘记等待它发生的想法。

您不能使用此结构:

do
{
    window.setTimeout(fadeIn,1000);
} while(done == false);
由于
setTimeout()
中的代码稍后运行,因此您的done值永远不会更改,此循环将永远运行。而且,只要它运行,
setTimeout()
也永远不会启动(因为javascript是单线程的)

相反,如果没有完成,您应该从
fadeIn()
函数启动下一个
setTimeout(fadeIn,1000)

function fadeOut()
{
    if(parseFloat(current.style.opacity)-0.1>.0000001)
    {
        current.style.opacity = parseFloat(current.style.opacity) -0.1;
        setTimeout(fadeOut, 1000);
    }

    else
    {
        current.style.opacity = 0.0;
    }
}

您不能使用此结构:

do
{
    window.setTimeout(fadeIn,1000);
} while(done == false);
由于
setTimeout()
中的代码稍后运行,因此您的done值永远不会更改,此循环将永远运行。而且,只要它运行,
setTimeout()
也永远不会启动(因为javascript是单线程的)

相反,如果没有完成,您应该从
fadeIn()
函数启动下一个
setTimeout(fadeIn,1000)

function fadeOut()
{
    if(parseFloat(current.style.opacity)-0.1>.0000001)
    {
        current.style.opacity = parseFloat(current.style.opacity) -0.1;
        setTimeout(fadeOut, 1000);
    }

    else
    {
        current.style.opacity = 0.0;
    }
}

您可能已成功设置了数百万个超时处理程序。控制台中没有记录语法错误或错误消息,对吗?请确保在调用它时定义了函数,并且我同意@pointi的说法。我认为该函数永远不会启动,因为它卡在do while循环中一直等待。您可以创建处理程序,但永远不会收到响应,因为您处于该循环中。代码只声明一些变量和函数,但它不会将它们中的任何一个用于任何操作,因此如果代码不执行任何操作,这正是它希望执行的操作。您可能成功设置了数百万个超时处理程序。没有语法错误或错误提示控制台中记录的消息,对吗?请确保调用时函数已定义,我同意@pointi的观点。我不认为函数一直在启动,因为它被卡在do中,而循环一直在等待。您可以创建处理程序,但永远不会收到响应,因为您在该循环中。代码只是声明了一些变量但是它不使用它们中的任何一个来做任何事情,所以如果代码没有做任何事情,那么这正是它应该做的。