var声明的变量具有函数级作用域、存在变量提升、不形成块级作用域、允许重复声明;即只在函数内有效,声明被提升至函数顶部但赋值不提升,if/for块中声明仍属函数作用域,同名重复声明不报错。

var 声明的变量具有函数级作用域,也就是说它只在声明它的函数内部有效(不在块级如 if、for 中产生新作用域)。
函数内声明,函数外不可访问
在函数中用 var 声明的变量,无法在函数外部读取:
示例:function example() {
var x = 10;
console.log(x); // 10
}
example();
console.log(x); // ReferenceError: x is not defined
var 存在变量提升(hoisting)
var 声明会被提升到函数顶部,但赋值不会。这意味着你可以在声明前访问变量,但值为 undefined:
function example() {
console.log(a); // undefined(不是报错)
var a = 20;
console.log(a); // 20
}
实际执行等价于:
function example() {
var a; // 声明被提升
console.log(a); // undefined
a = 20; // 赋值保留在原位置
console.log(a);
}
在块中使用 var 不创建新作用域
即使在 if 或 for 块中用 var 声明,变量仍属于所在函数作用域:
function test() {
if (true) {
var y = 30;
}
console.log(y); // 30 —— y 在整个函数内都可访问
}
这与 let 和 const 的块级作用域行为明显不同。
重复声明不会报错
在同一作用域中多次用 var 声明同名变量,不会报错,后一次声明会覆盖前一次(但只是重复声明,不影响已赋值):
function demo() {
var z = 100;
var z = 200; // 合法,不报错
console.log(z); // 200
}Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











