javascript中的變量做用域

<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>

  結論:javascript

    1)不使用var聲明的變量不論是在哪聲明的,其做用域都是全局的java

    2)javascript中不存在塊級做用域函數

    3)只有在函數中使用var聲明的變量其做用域是局部的, 其它都是全局的blog

 

爲何不存在塊級做用域?請看下面:ip

  ①:作用域

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

  ②:io

console.log(value);    // 報錯

  在處理第①種狀況時,會轉變成:console

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

  因此打印vaule的值是undifined,而不是報錯function

相關文章
相關標籤/搜索