解决方案 »

  1.   

    <script type="text/javascript">
            var a = 10;
            sayHi();
            function sayHi() {
                var a = a + 10;     /
                document.write(a);
            }
            document.write(a);
        </script>
    --输出:NaN 10sayHi里边,var a 就相当于 a跟外边没联系了。
    重新定义a = a+10 
    那等号右边的a还没给个确切的值呢;
    改成var a = 0
    var a = a+10;
      

  2.   

    局部变量优先级比全局变量优先级高,这本没什么,但若局部变量与全局变量重名,那就有的说了,看代码:
    <script type="text/javascript">
    var str='test';
    function shuchu(){
        document.write(str+'<br/>');
        var str='world';
        document.write(str+'<br/>');
    }
    shuchu();
    </script>
    输出:
    undefined
    world
    原因:局部变量作用于整个作用域.
    原因解释:正因为局部变量作用于整个作用域,所以函数shuchu中的第一行document.write(str+'<br/>');中的str是用的局部变量,然而此时尚未赋值,所以会出现undefined.
      

  3.   

            function sayHi() {
                var a = a + 10;
                document.write(a);
            }
    =====等同=====
            function sayHi() {
                var a;//undefined
                a = a + 10;//undefined + 10 = NaN
                document.write(a);
            }
      

  4.   

    代码他是怎么执行的  执行到第一行 document.write(str+'<br/>'); 的时候 它怎么知道 第二行又定义了一个 var str='world';  代码他是全部解析完以后再一句一句执行的?
      

  5.   

    第2题
    js的运行顺序要弄明白(它是先声明完变量,才给变量值的)
    var a = a + 10 
    其实是 var a ; //这是的a 是undefined 
                 a = a + 10 ;  //undefined + 10 = NaN 
      

  6.   

    作用域的原因 在函数内用 var 定义后这个a不是外面的a, 所以 a没有值