本帖最后由 u011668126 于 2013-08-12 09:22:33 编辑

解决方案 »

  1.   


    <script type="text/javascript">
    var a=9;
     
    function dd(){
        var a=5;
        return a;
        
    }
    alert(dd());//这里输出的却是undefined,为什么    
    function aa(){
        return a;
    }
    alert(aa());
    </script>
      

  2.   

    首先,有两点需要知道:
    1.一个js代码段在执行之前,首先会把‘var’声明的变量进行预处理(相当于在执行之前标识出这些变量已经存在,但仅仅是标识出存在而已,并不根据实际代码对他们进行赋值而是赋值undefined)。
    2.函数在执行的时候,如果出现关于变量的操作,那么他会首先在内部查找有无该变量,如果没有再从包含它的函数或者全局一层一层往外查找。因此,具体到你的代码:
    dd在执行return a;的时候首先查找自己内部有没有变量a,显然是存在变量a的(因为var a=5已经在整个js段的执行前被预处理了,即声明变量a已经存在于dd内部),所以会返回a的值,但是:虽然a已经存在,但是a的赋值在return语句之后且不会被执行,所以当前a的值为undefined,所以dd()返回的是undefined。
    dd中的a和外部的a是两个仅仅名字相同但是毫无关系的变量,dd操作的是它自己内部的a。关于上面提到的2点,如果想了解的更透彻,楼主可以自行google“js执行顺序”和“js词法作用域”两个关键字。
      

  3.   

    只需记住同一片作用域,相同的变量名指代的必定是同一个变量
    dd函数内的a是函数内定义的a而不是函数外面的,alert时a未赋值所以是undefined
      

  4.   

    a 没有赋值 js代码的执行是一步一步往下面执行的,所以会undefined
      

  5.   

    js没有块级 作用域  也就是说你在函数内任意位置定义的变量  在该函数的任意位置都可以访问这个变量  甚至是变量定义之前  只不过变量为负值为undefined而已