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

浙公网安备 33010602011771号