js实现var
在JavaScript中,var是用于声明变量的关键字,它是ES5及之前版本的主要变量声明方式。以下是关于var的关键特性和用法:
变量声明与初始化
使用var可以声明变量,变量可以被初始化或稍后赋值:

var x; // 声明变量x,初始值为undefined
var y = 10; // 声明并初始化变量y
作用域特性
var声明的变量具有函数作用域(function scope),而非块级作用域(block scope)。这意味着变量在声明它的整个函数内可见:
function example() {
if (true) {
var z = 5; // z在整个函数内可用
}
console.log(z); // 输出5
}
变量提升(Hoisting)
var声明的变量会被提升到其作用域的顶部,但赋值不会被提升:

console.log(a); // 输出undefined(变量a已提升但未赋值)
var a = 3;
全局作用域与重复声明
在全局作用域中使用var会创建全局变量(挂载到window对象)。var允许重复声明同一变量而不报错:
var b = 1;
var b = 2; // 不会报错,b的值被覆盖
与let和const的对比
var允许重复声明,而let和const不允许。var没有块级作用域,let和const有块级作用域。var存在变量提升,let和const存在暂时性死区(TDZ)。
注意事项
- 现代JavaScript开发中,推荐优先使用
let和const以明确作用域和避免意外行为。 - 在严格模式(
'use strict')下,未声明的变量赋值会报错,但var仍可正常使用。
示例对比:
// var 示例
for (var i = 0; i < 3; i++) {
setTimeout(() => console.log(i)); // 输出3三次(共享同一作用域)
}
// let 示例
for (let j = 0; j < 3; j++) {
setTimeout(() => console.log(j)); // 输出0, 1, 2(块级作用域)
}






