本帖最后由 moliu 于 2009-10-13 16:37:46 编辑

解决方案 »

  1.   

    var x=function (){alert(v)};//为什么这里没有声明x函数? 就是 function x()
    {alert(v)}调用的时候 一样的 写 x();
      

  2.   

    function x(){alert(2)}; 
    x(); 
    var x = function(){alert(0)}; 
    x(); 
    var x=function(){alert(1)}; 
    x(); 
    function x(){alert(3)}; 
    x(); js被运行时会先检查代码中使用function x(){}定义的函数,并运行
    function x(){alert(2)}; 
    function x(){alert(3)}; 
    所以这两句被JS优先执行,然后函数X又被两次重写,所以结果是3,0,1,1应该是这么解释吧
      

  3.   

    至于with,他的运行比较特殊因为有不少人质疑其运行效率,而且用到的场合也不多,所以没什么研究期待有高人出手
      

  4.   

    JavaScript执行引擎并非一行一行地分析和执行程序,而是一段一段地分析执行的。而且,在同一段程序的分析执行中,定义式的函数语句会被提取出来优先执行。函数定义执行完之后,才会按顺序执行其他语句代码x();//这里运行时浏览器已经解析两个function x(),然后后面一个是3,所以第一次出来3
    var x = function(){alert(0)};//然后再解析这个,所以下面出来0
    x();
    var x=function(){alert(1)};//然后再解析这个,所以下面出来1
    x();
    function x(){alert(3)};//已经解析过了,忽略,下面还是1
    x();
      

  5.   

    参见:function表达式与申明 http://www.w3cgroup.com/article.asp?id=144JavaScript面试的忽悠题 http://www.w3cgroup.com/article.asp?id=143
      

  6.   

    <script type="text/javascript">
    var v=10; 
    var obj={v:2}; 
    x(); 
    with(obj) 

        var x=function (){alert(v)};//为什么这里没有声明x函数? 
        x(); 

    x(); 
    </script>
    //运行结果:什么也没有<script type="text/javascript">
    var v=10; 
    var obj={v:2}; 
    x(); 
    with(obj) 

        var x=function x(){alert(v)};//为什么这里就声明x函数了? 
        x(); 

    x(); 
    </script>
    //运行结果:10、2、2
      

  7.   

    var x=function x(){alert(v)};应该相当于
    var y=x;
    function x(){
    alert(v);
    }
      

  8.   

    第一个在ie相当于
    var v=10; 
    function x(){alert(v)}
    var obj={v:1}; 
    x(); var x=function (){alert(obj.v)}; 
    x(); x(); 第二个相当于
    function x(){alert(2)}; 
    function x(){alert(3)}; 
    x(); 
    var x = function(){alert(0)}; 
    x(); 
    var x=function(){alert(1)}; 
    x(); x(); 
      

  9.   

    参考
    http://hax.javaeye.com/blog/230182
    http://lifesinger.org/blog/2009/01/javascript-run-mechanism/
      

  10.   

    http://www.cnblogs.com/leadzen/archive/2008/02/25/1073404.html 
      

  11.   


    var v=10; 
    var obj={v:2}; 
    x(); 
    with(obj) 

        var x=function (){alert(v)};//为什么这里没有声明x函数? 
        x(); 

    x(); 
    //运行这段代码,什么也不会出现。而下面的代码运行结果,却正常:
    var v=10; 
    var obj={v:2}; 
    x(); 
    with(obj) 

        x=function x(){alert(v)};//为什么这里就声明x函数了? 
        x(); 

    x(); 再稍微改动下代码,又不正常了:var v=10; 
    var obj={v:2}; 
    x(); 
    with(obj) 

        function x(){alert(v)};// 
        x(); 

    x(); //运行结果都是:10、10、10 ,为什么不是 10、2、10?再看下面的代码:
    var v=10; 
    var obj={v:2}; 
    y(); 
    with(obj) 

        y=function x(){alert(v)};
        y(); 

    y(); //运行结果,还是什么也没有。头大了,大了,说不清、讲不清了。怎么也弄不清了。请大侠们指点
      

  12.   

    js先解析 function x(){}方式定义的函数块;这是一个有名函数;
    而以 var x = funtion(){}方式定义时,这是一个无名函数,必须定义在执行以前;不知道说清楚了没有。。
      

  13.   

    你的代码其实反映了几个方面的问题
    1、with
    2、this
    3、js函数使用