<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,而不是报错