变量是内存中的命名空间,声明方式决定作用域、提升行为和可变性;var有提升且函数作用域,let/const为块级作用域并存在暂时性死区,const需初始化且不可重赋值但允许修改对象属性;现代开发默认用const,必要时用let,基本弃用var。

面试时讲变量声明,关键不是背定义,而是说清“为什么用它、怎么选、容易错在哪”。一句话点明核心:变量是内存里的命名空间,声明方式决定它在哪能用、会不会被提前访问、能不能改值。
讲清楚三种声明方式的区别
别只说“var函数作用域,let/const块级作用域”,要带场景:
-
var:有变量提升,声明前访问得
undefined;允许重复声明;函数内用它,整个函数都可见 -
let:块级作用域(
{}、if、for里都生效);不存在真正提升,声明前访问直接报ReferenceError(暂时性死区);不能重复声明,但可以后续重新赋值 - const:同样块级+暂时性死区;必须初始化;声明后不能重新赋值——注意:对象或数组本身可修改属性或元素,只是“指向不能变”
用对比代码体现理解深度
光讲理论不够,现场写两行就能加分:
console.log(a); // undefined var a = 1; console.log(b); // ReferenceError let b = 2;
再补一句:“这就是为什么现代项目基本不用var——它容易引发意料外的行为,而let和const让作用域更可控,也更符合直觉。”
立即学习“Java免费学习笔记(深入)”;
顺手带出常见误区
面试官爱追问坑点,提前点明显得准备充分:
- “
const声明的对象,obj.name = 'Tom'完全合法,改的是堆内存里的内容,不是栈里存的那个地址” - “
for (let i = 0; i 里每个循环都有独立的<code>i,所以setTimeout(() => console.log(i), 0)会依次输出0、1、2;换成var就全输出3” - “全局下用
let声明,不会挂到window上;var会——这也是避免污染全局的实践依据”
收尾落到工程习惯
最后一句收得实在些:“日常开发中,我默认用const,只在确实需要重赋值时才换let,基本不用var。这样既减少出错可能,也让代码意图一目了然。”


















