<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