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 --harmonyuse 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博客。

转载于:https://www.cnblogs.com/hustskyking/p/ES6-computed-properties.html

ECMAScript 6中的let和const关键词相关推荐

  1. 详解var、let、const关键词声明变量的区别,以及变量提升、块级作用域的认识等。

    首先回顾一下JavaScript中var声明变量的基础知识: • 在使用var关键词声明变量时,变量在函数外则是全局变量,有全局作用域,全局变量在页面关闭后销毁:变量在函数内则是局部变量,作用局部作用 ...

  2. 什么时候应该在ECMAScript 6中使用Arrow函数?

    本文翻译自:When should I use Arrow functions in ECMAScript 6? The question is directed at people who have ...

  3. 详解ES6中的 let 和const

      前  言 JRedu ECMAScript 6 是 JavaScript 语言教程,全面介绍 ECMAScript 6 新引入的语法特性. ES6 与上一个版本 ES5 的所有不同之处,对涉及的语 ...

  4. python常量列表_Python中实现常量(Const)功能

    python语言本身没有提供const,但实际开发中经常会遇到需要使用const的情形,由于语言本身没有这种支出,因此需要使用一些技巧来实现这一功能 定义const类如下 复制代码 代码如下: imp ...

  5. python中的const_Python实现Const详解

    python语言本身没有提供const,但实际开发中经常会遇到需要使用const的情形,由于语言本身没有这种支出,因此需要使用一些技巧来实现这一功能 定义const类如下 复制代码 代码如下: imp ...

  6. ECMAScript 6中的Set和Map数据结构

    一.Set 基本用法: Set本身是一个构造函数,用来生成Set数据结构.Set函数可以接受一个数组作为参数用来初始化. const arr = new Set([2,2,3,3,4,4,5,8]); ...

  7. ES6中表达export default const是无效的

    问题 如果您是ES6新手,可以参考一下本文--高手请移驾别往! 请先看下面的图形描述: 也就是说,ES6中default后面是不允许跟const关键字的. 分析 上图中表达可以更换成另一种形式,就可以 ...

  8. 快醒醒,C# 9 中又来了一堆关键词 init,record,with

    一:背景 1. 讲故事 .NET5 终于在 2020-08-25 也就是前天发布了第八个预览版,这么多的预览版搞得我都麻木了,接踵而来的就是更多的新特性加入到了 C# 9 中,既然还想呆在这条船上,得 ...

  9. 高级语言中的关键字:const用法分析

    const是constant的缩写,本意是"不变的.不易改变的",它属于c.c++.Java等高级语言中的关键字,通常用来修饰变量对象.函数参数.c或c++指针对象使用. cons ...

最新文章

  1. mysql2012用户名_mysql2012 代码怎么用
  2. 路由跟踪工具0trace
  3. QCon上海2015十大热点
  4. php mysql-mysqli
  5. 1043 输出PATest (20分)_23行代码满分
  6. BZOJ 2956 模积和
  7. jieba分词_wordcloud词云美化——jieba结巴中文分词(将长句拆分)
  8. Android使用sqlliteOpenhelper更改数据库的存储路径放到SD卡上
  9. 《软件工程》 课后思考题
  10. HJ212国家环保标准的数据上报-专用智能网关IGT-SER
  11. 邮件服务器搭建 iredmail
  12. 淘宝新规:售假者严重违规须缴纳100%保证金
  13. position:fixed;支持ie6,清除e6下抖动。
  14. .gitignore java web_使.gitignore忽略除少数文件以外的所有内容
  15. Oracle SQL 批量修改资料库邮箱后缀名称
  16. DQN:Playing Atari with Deep Reinfocement Learning
  17. 微信隐藏功能:群接龙
  18. 河北软件职业技术学院计算机应用工程系,河北软件职业技术学院第四届模特大赛举办成功...
  19. matlab添加文件夹语音_基于MATLAB的语音处理
  20. R语言 RStudio快捷键

热门文章

  1. 下载keep运动软件_我把私教带回了家,Keep智能动感单车体验|钛极客
  2. p2p网络测试工具_自媒体 IPFS官方升级DHT方案,提升网络整体性能
  3. 833 计算机学科专业基础综合,2017年西安电子科技大学计算机学院833计算机学科专业基础综合考研仿真模拟题...
  4. android复制链接到粘贴板,Android复制粘贴到剪贴板
  5. java 文件分隔符_Java文件分隔符
  6. python创建excel图表_python使用VBA(8):Excel创建图表(简单)
  7. python层次聚类分析_SPSS聚类分析:系统聚类分析
  8. python解码函数_python2和python3的编码encode解码decode函数
  9. iphone导出照片到电脑_如何更改 iPhone 照片格式?
  10. 无法打开文件“python310_d.lib”