在 javascript 中,使用 var 重复声明同一个变量不会报错,而是直接忽略第二次及后续的声明语句,变量的值保持不变。这意味着 var 具有变量提升特性,且在同一作用域内允许同名覆盖但实际执行时仅保留首次定义或赋值后的状态。

var 在全局作用域下重复声明会怎样
在全局作用域(非严格模式下)中,重复声明 var 变量会被引擎视为对已有变量的引用,不会创建新绑定。如果先声明未赋值,值为 undefined;若后续有赋值操作,则更新该值。全局对象(如浏览器中的 window)的属性会与 var 声明的变量相互映射,重复声明不会影响这种映射关系。

console.log(a); // undefined var a = 10; console.log(a); // 10 var a = 20; // 重复声明,被忽略 console.log(a); // 20
var 在函数作用域下重复声明会怎样
在函数内部,var 的作用域是函数级的。如果在函数内多次使用 var 声明同一名称的变量,引擎同样会忽略重复的声明部分。无论这些声明出现在函数体的哪个位置,它们都属于同一个作用域绑定。如果存在赋值,后出现的赋值语句会修改该变量的值,但声明本身不会产生新的局部变量。

function test() {
var b = 5;
console.log(b); // 5
var b = 15; // 重复声明,忽略
console.log(b); // 15
}
test();
基于 var 提升与重复声明的具体问题
当 var 的声明位于赋值语句之后,或者在条件分支中重复声明时,由于变量提升机制,声明部分会被移动到作用域顶部,导致初始值为 undefined。重复声明不会改变这一提升行为,也不会引发语法错误,但可能导致逻辑上的混淆,因为开发者可能误以为后面的声明会重新初始化变量。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











