ECMAScript 6中的let和const关键词
2013-11-28 21:46 Barret李靖 阅读(4998) 评论(0) 编辑 收藏 举报ECMAScript 6中多了两个定义变量的关键词,一个是let,另一个是const,后者顾名思义就是常量定义,前者的作用域范围是块级的。
一般写过js的童鞋都知道,同其他语言一样,JS中的变量作用域是函数域而不是块级分割的,但是涉及到变量提升(hosting),闭包等问题的时候,很多有经验的程序员依然会头疼。
var a = 5; if(true){ var a = 10; } console.log(a);//10
上面的结果是10,但是我们看到,在if block内外都有一个a的定义,按我们正常的理解来看,这两个a应该占用的是不同的内存,而事实上,他们共用同一个内存。为此,ES 6中的let关键词“修复”了这个问题。
let a = 5; if(true){ let a = 10; } console.log(a); //5
let作用在块级作用域中,所以不管是switch还是if还是for,只要是let定义的变量,他就只能在那个花括号内部起作用。let是一个让程序员比较省心的一个关键词,而还有一个令人兴奋的关键词是let的兄弟const,一旦定义一个变量为const类型,后面就不能对他进行修改。
const aa = 11; alert(aa) //11 aa = 22; alert(aa) //11
关于这两者的兼容性问题,可以到这里查看http://kangax.github.io/es5-compat-table/es6/
Node已经支持了const和let关键词,可以这样使用node --harmony
和use strict
。目前一些浏览器还不支持这样的写法,但是利用defs.js这个库可以ES3也支持这个。他的原理就是利用esprima来编译并重写你的代码。比如:
"use strict"; function fn() { const y = 0; for (let x = 0; x < 10; x++) { const y = x * 2; const z = y; } console.log(y); // prints 0 } fn();
经过def.js重新编译之后变成:
"use strict"; function fn() { var y = 0; for (var x = 0; x < 10; x++) { var y$0 = x * 2; var z = y$0; } console.log(y); // prints 0 } fn();
详情可以去https://github.com/olov/defs这里瞅瞅。
本文同步自我的github博客。

版权声明: 署名-非商业性使用-禁止演绎 3.0 国际(CC BY-NC-ND 3.0)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 单线程的Redis速度为什么快?
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库