_daemon  
<script>
        // javascript变量的作用域
        // 声明环境: 块中、函数中、全局
        // 声明方式: 1)使用var 2)不使用var
        
        // 块中
        if (true){
            var block_var_a = "test";
            block_a = "test";
        }
        console.log("block_var_a="+block_var_a);    // block_var_a=test
        console.log("block_a="+block_a);    // block_a=test

        // 函数中
        var fun1 = function () {
            var fun_var_a = "test";
            fun_a = "test";
        }
        fun1();
        //console.log("fun_var_a="+fun_var_a);    // Uncaught ReferenceError: fun_var_a is not defined
        console.log("fun_a="+fun_a);    // fun_a=test

        // 全局
        var global_var_a = "test";
        global_a = "test";
        if (true){
            console.log("global_var_a="+global_var_a);  // global_var_a=test
            console.log("global_a="+global_a);  // global_a=test
        }
    </script>

    <!-- 另一script标签中 -->
    <script>
        console.log("-----------------------------");

        console.log("block_var_a="+block_var_a);    // block_var_a=test
        console.log("block_a="+block_a);    // block_a=test
        console.log("fun_a="+fun_a);    // fun_a=test
        console.log("global_var_a="+global_var_a);  // global_var_a=test
        console.log("global_a="+global_a);     // global_a=test
    </script>

  结论:

    1)不使用var声明的变量不管是在哪声明的,其作用域都是全局的

    2)javascript中不存在块级作用域

    3)只有在函数中使用var声明的变量其作用域是局部的, 其它都是全局的

 

为什么不存在块级作用域?请看下面:

  ①:

if(false){
  var value = 1;      
}
console.log(value);    // undifined

  ②:

console.log(value);    // 报错

  在处理第①种情况时,会转变成:

var vaule;
if(false){
  value = 1;  
}
// ...

  所以打印vaule的值是undifined,而不是报错

posted on 2018-04-25 10:55  oonnnee  阅读(322)  评论(0编辑  收藏  举报