优先使用 const,需重新赋值时用 let;二者具块级作用域且受暂时性死区保护,可避免 var 的变量提升与作用域遮蔽问题;声明应靠近首次使用处,并注意命名隔离。

直接用 let 或 const 替代 var,就能避开绝大多数变量提升引发的 undefined 问题和作用域遮蔽陷阱。
优先使用 const,仅在需重新赋值时用 let
ES6 起,const 和 let 都具有块级作用域,且不会像 var 那样把声明“悄悄提上去”还留个 undefined。它们虽然也会被提升(编译阶段登记),但处于“暂时性死区(TDZ)”,在声明语句执行前访问会直接报错,而不是返回 undefined——这反而更安全,能立刻暴露错误。
-
const API_URL = "https://api.example.com";—— 常量、对象引用不变时首选 -
let count = 0;—— 计数器、循环变量、后续要改值的场景 - 避免
var isActive = true;—— 即使只用一次,也别用var
不在函数内重复声明同名变量
函数内部用 var 声明与外层同名变量,会导致局部变量覆盖全局变量,且因提升而提前变成 undefined。即使你不用 var,也要注意命名隔离。
DMap GL地图JSAPI(dmapgl)开发指南。用于编写、审查、调试 DMap 地图 API 代码,涵盖地图初始化、覆盖物渲染、图层管理、事件处理、控件交互等任务。当用户提及 dmap、dmapgl、jsapi‑gl 或相关地图开发需求时自动触发。
- ❌ 错误示范:
let name = "Alice";function greet() { console.log(name); let name = "Bob"; }→ 报错:Cannot access 'name' before initialization - ✅ 安全写法:
const userName = "Alice";function greet() { const visitorName = "Bob"; console.log(visitorName); }
声明尽量靠近首次使用位置
不强制要求“函数顶部统一声明”,而是哪里需要就在哪里声明。这样逻辑清晰,也自然规避了“提前访问未声明变量”的风险。
- 比如处理表单时:
if (isValid) { const formData = new FormData(formEl); submit(formData); } - 循环中:
for (let i = 0; i
全局变量也走 const/let,不挂 window
var 在全局作用域声明会自动成为 window 属性(浏览器环境),容易造成意外污染或覆盖。用 const/let 声明的全局变量不会挂载到 window,更可控。
- ❌
var version = "1.2.0"; console.log(window.version); // 1.2.0 - ✅
const VERSION = "1.2.0"; console.log(window.VERSION); // undefined

















