能否彻底停止在JavaScript中使用var关键字?
彻底摒弃
var,只用let/const完全可行吗? 绝对可行——而且这其实是现在非常推荐的JavaScript编码实践!作为从Java转过来的开发者,你会发现用let(和const)的块级作用域逻辑和你熟悉的Java变量规则高度一致,反而能避开var带来的各种坑。
为什么完全可以抛弃var?
- 块级作用域更符合直觉:
var的函数作用域经常会导致意想不到的变量泄漏(比如循环里的变量在循环结束后依然可访问),而let的块级作用域({}包裹的区域就是作用域)和Java的变量作用域逻辑完全匹配,能大幅减少这类低级错误。举个例子:// 用var的坑:循环结束后i依然存在 for (var i = 0; i < 3; i++) { setTimeout(() => console.log(i), 100); } // 输出3,3,3 // 用let的正确行为:每次循环都有独立的i for (let i = 0; i < 3; i++) { setTimeout(() => console.log(i), 100); } // 输出0,1,2 let/const完全覆盖var的场景:ES6之后,let可以处理所有需要重新赋值的变量场景,const则用于声明不需要重新赋值的常量(这其实更推荐优先使用,能强制代码的不可变性,提升健壮性),两者加起来完全没有var的用武之地。- 现代环境完全支持:目前所有主流浏览器(Chrome、Firefox、Safari、Edge)都原生支持
let/const,哪怕是需要兼容旧环境的项目,通过Babel等转译工具也能轻松将ES6代码转译为兼容ES5的版本,不需要担心兼容性问题。
需要注意的小细节
唯一需要适应的是let的暂时性死区(TDZ):在let声明变量之前,该变量无法被访问,这和var的变量提升行为不同,但这其实是个特性——它能避免你在变量声明前就使用它的错误,让代码更严谨。
额外建议
与其只摒弃var,不如养成**优先用const,必要时用let**的习惯:当变量不需要被重新赋值时,用const声明,能明确表达你的代码意图,也能防止意外的变量修改。
内容的提问来源于stack exchange,提问作者user9723618
相关产品推荐
相关产品推荐

