参考:
http://www.pjhome.net/article.asp?id=625

解决方案 »

  1.   

    发现不同了show()
    function show(){alert();};
    这样会没有问题show()
    var show = function(){alert();};
    这样就会出错可以看出
    var show = function(){alert();};
    这样跟定义一个变量那样
    function show(){alert();};
    这样定义的话到底是怎么一个过程呢
      

  2.   

    <script type="text/javascript">
    show()
    </script>
    <script type="text/javascript">
    function show(){alert();};
    </script>
    这样的话就不行
    估计是在同一个script内进行了内部定义
      

  3.   

    在同一个script内
    像function show(){alert();};这种形式的定义是在执行程序之前进行的
    而var show = function(){alert();};这种是在执行这行代码时才定义的不知我想的对不对
    还有show到底是一个函数 变量 还是对象呢
    越搞越糊涂啊
      

  4.   

    同意楼上,
    自已的分析也是:
    像function show(){alert();};这种形式的定义是在对整个<script>进行语法检查()编译时就执行了。
    其它的代码是语法分析完后再按顺序执行的。
      

  5.   

    我看了dh20156的文章后我也测试了一下
    按照我的理解function a(){alert("a")}
    b=a;
    function a(){
        b();
        alert("ok");
    }
    这里运行的顺序是
    function a(){alert("a")}
    function a(){
        b();
        alert("ok");
    }
    b=a;
    而第二次a的定义覆盖了第一次即实际上是
    function a(){
        b();
        alert("ok");
    }
    b=a;
    这样的话在定义a时b其实还没有定义运行
    function a(){
        b();
        alert("ok");
    }
    b=a;
    a();
    出现stack什么出错我觉得是这样所以出错的
    不知道我想的对不对
      

  6.   

    function a(){
        b();
        alert("ok");
    }
    b=a;
    a();
    这里应该是一个死循环吧
      

  7.   

    function show(){alert(2);}; 
    show2 = show; 
    function show(){alert(1);}; 
    show(); 
    show2(); 
    这里是1 1 function show(){alert(2);}; 
    show2 = show; 
    show = function (){alert(1);}; 
    show(); 
    show2(); 
    这里是1 2
    这里也看出来第一个的执行顺序实际是
    function show(){alert(2);}; 
    function show(){alert(1);}; 
    show2 = show; 
    show(); 
    show2(); 
    所以就产生那样的结果
      

  8.   

    lz有兴趣可以去看看
    http://www.mozilla.org/rhino/,有javascript开源引擎源码,
    看了就通了.感觉楼主过于求甚解了.
      

  9.   

    你的学习方法真有趣..哈哈, 不过俺一般都是从一大堆一大堆的FAQ中学习语言, 非常有效. 
      

  10.   

    TO---cloudgamer(欢迎交流qq215754452) 
    我试着回答一下你们的问题function show(){alert(2);};  
    show2 = show;                
    function show(){alert(1);};  
    show(); 
    show2(); 
    这里是1 1 
    //以上这种没什么好回答的,应该可以理解吧function show(){alert(2);};   //可以理解为定义了一个show()的类
    show2 = show;                
    //模拟继承了一个类,也可以这么写show2.prototype = new show()show = function (){alert(1);}; 
    //这里是定义了一个公共方法show();  公共方法调用 显示 1show2(); 
    //实际调用的是show()类这里是1 2
      

  11.   

    我跟楼上的理解不同
    我把show看成是指针function就是实际的内容function show(){alert(2);};  show->function (){alert(2);};
    show2 = show;                show2->function (){alert(2);};
    show = function (){alert(1);}; show->function (){alert(1);};show();   
    show2();
    显然结果是1 2 我觉得我理解的很简单也合理
    楼上的我看不懂
      

  12.   

    按jxl76219的理解是show是show2的父类(不知是不是这样说,反正之间有关系)我一直的理解是
    show2 = show;
    仅仅把指针值复制给show2
    并没有新建一个对象(只有一个对象怎么继承,自己继承自己?)要有继承要新建一个对象

    function Car(){
    }
    var car = new Car();
    这种
    虽然看起来差不多但new是新建了一个对象的这才有继承等等东西的吧
      

  13.   

    我认为不一样的~~一个是方法...另一个赋个object吧?不知道是不是这样?
      

  14.   

    jxl76219可以试试
    function show(){alert(2);}; 
    show = function (){alert(1);}; 
    show();
    如果show();是公共方法调用
    那你还能找到所说的show()类么
      

  15.   

    to iamXiaMi()我觉得两个都是赋个object
    只是执行顺序不同而已
    就是一个会被预编译(到底是不是这么叫呢)另一个不会
      

  16.   

    关于继承我也弄不懂function show(){this.a = 1;}; 
    var show2 = new show();
    show = function (){this.a = 2;}; 
    show.prototype.a = 3;
    var show3 = new show();alert(show2.a);//1
    alert(show3.a);//2delete(show2.a);
    delete(show3.a);alert(show2.a);//u
    alert(show3.a);//3为什么alert(show2.a);这里是udf