<script type="text/javascript">
(document).ready(function() {
    $("button").click(function() {
        $("div").hide(2000,function() {
            alert("Hello JavaScript"); 
        });
    });
});
</script>上面代码的效果是以两秒的效果隐藏div后,再执行回调函数,弹出”Hello JavaScript“,那下面这段代码为什么不行?<script type="text/javascript">
(document).ready(function() {
    $("button").click(function() {
        $("div").hide(2000);
            alert("Hello JavaScript");
    });
});
</script>JS不是单线程吗? $("div").hide(2000);和 alert("Hello JavaScript");不应是前者执行完了,后者再执行吗?为什么前者的动画效果还没执行完,就执行后面的代码,难道是JS碰到动画之类效果的时候是抛给别的线程执行的,它自身不执行渲染之类的效果,所以它就立即执行后面的代码。JavaScriptjQuery

解决方案 »

  1.   

    因为你的
    (document).ready(function() {
    没加$符号
    改成$(document).ready(function() {
      

  2.   

    setTimeout(function(){
    alert(111);
    },2000);
    alert(222);
    你觉得结果是
    111 222
    还是
    222 111
      

  3.   

    那hide()方法这种动画效果是js渲染的吗?还是给别的线程渲染。
      

  4.   

    别脱离了原生JS的知识,更不要随便把任何语法(哪怕是JS库的函数使用方法)按自己的意思去想像。
    学习首先必须是服从,然后才能自由。
      

  5.   


    JS是单线程的,如果你想看下hide是怎么执行的,你可以用浏览器调试一下,设置一个断点,然后跟踪进jQuery源码里面看
      

  6.   

    jquery的动画实际上是用setTimeout()实现的。
    而setTimeout()就相当于抛出个新的线程。
    你可以把setTimeout()当成一个定时自动触发的事件
      

  7.   

    你再看看这段代码,
    <script type="text/javascript">
    function jisuan() {
    var i;
    for(i = 1; i<100000; i++)
    {
    var b = 1;
    b += i;
    document.write(b + "<br />");
    }
    alert("hahah");
    }
    jisuan();
    alert("what");
        </script>最后的结果是先显示hahah,再显示what。应用在hide()上的话,不应该是hide的动画先显示完吗?再处理后面的语句吗?
      

  8.   

    jquery的动画实际上是用setTimeout()实现的。
    而setTimeout()就相当于抛出个新的线程。
    你可以把setTimeout()当成一个定时自动触发的事件
      

  9.   

    $(selector).hide(speed,callback);由于 JavaScript 语句(指令)是逐一执行的 - 按照次序,动画之后的语句可能会产生错误或页面冲突,因为动画还没有完成。
    为了避免这个情况,您可以以参数的形式添加 Callback 函数。