【js基础】const、let、var的区别及面试题

张开发
2026/4/30 22:40:17 15 分钟阅读

分享文章

【js基础】const、let、var的区别及面试题
简单概括区别var 旧语法、没有块级作用域、可变量提升、可修改、可重复let 新语法、有块级作用域、不可变量提升、可修改、不可重复const 新语法、有块级作用域、不可变量提升、不可修改、必须初始化块级作用域if(true){ var a 1; let b 2; } console.log(a); // 1 ✅var 能出来 console.log(b);不可变量提升let、const的暂时性死区console.log(a); // undefinedvar 提升了 var a 1; console.log(b); // 报错 ❌let 死区 let b 2;const必须有初始值、不可修改const a; // ❌ 报错必须赋值 const a 10; a 20; // ❌ 报错重复声明var a 1; var a 2; // ✅ 不报错 let b 1; let b 2; // ❌ 报错全局挂载var a 1; console.log(window.a); // 1 ✅ let b 2; console.log(window.b); // undefined ❌面试题什么是暂时性死区、什么是变量提升使用let、const在变量声明之前使用会报错。使用var声明变量会提升到作用域顶部值不会提升默认undefinedconst一定是不可以修改的吗基础类型不可以修改。引用类型对象、数组只能修改内部属性、不能修改引用为什么更推荐const、let语义更清晰、变量不容易被污染、有块级作用域、更安全、变量常量区分开减少错误观察下面输出块级作用域 异步执行顺序 变量作用域绑定for(var i 0;i3; i) { setTimeout(() { console.log(i) }, 2000) } // 2秒后输出333 for(let i 0;i3; i) { setTimeout(() { console.log(i) }, 2000) } // 2秒后输出012setTimeout异步执行会在for循环执行完后执行。在第一段代码中setTimeout执行的时候i已经3。第二段代码每次循环有独立的作用域每个定时器绑定自己的i每次输出不同。修改第一段代码输出012for(var i 0;i3; i) { (function (i) { setTimeout(() { console.log(i) }, 2000) })(i) }

更多文章