1. const(声明一个只读的常量)

这个是很好理解的,且声明时就必须赋值而不能以后再赋,不然会报错。

而个人认为它最大的用处还是在于 {} 和 [] 上,const 保证了它的内存地址(指针)不变(非数据不可变)。(但这点现在浏览器好像还未统一)

var TEST = {};
TEST.xx = 'x'; // 可执行
TEST = {x: 'x'}; // 重新赋值则不可行

另外注意,我们推荐常量所用名称最好全为大写字母。

2. let (申明块级作用域变量)

var a = [];
for(let i=0; i<1; i++) {
a[i] = function(){console.log(i)}
if (true) {
let i = 'x';
}
console.log(i); // 打印数字而不是 'x'
}
a[0](); // 使用 let 打印 0,使用 var 打印 5。

以上即为 let 的典型特征,块级作用域内有效。

2.5 块级作用域

怎样才叫一个区块呢,function / for / if,以及哪怕两个中括号中间的都是一个独立的块级。

注意,同一区块内不能出现相同变量名的声明,否则会报错。

内层可访问外层块级,外层不能访问内层新申明的变量,因此 IIFE 写法不再有必要:

// IIFE 写法
(function () {
var a = 'x';
}()); // 块级作用域写法
{
let a = 'x';
}

此外,let 和 const 不同于 var 还在于,var 会优先声明,而 ES6 不能再这样做了。

a = 'x';
var a;
console.log(a); // x b = 'x';
let b ;
console.log(b); // 报错

另外,函数声明在 ES6 的块级作用域是个奇葩,而且浏览器对此的实现还没有统一,不做讨论

// 浏览器的 ES6 环境
function fn() { console.log('I am outside!'); }
(function () {
if (false) {
function fn() { console.log('I am inside!'); }
}
f(); // f is not a function
}());

以上,便是 let 和 const 的说明,

在此强烈推荐使用这两个命令,它们有着 var 无法拥有的特性,

应当用 let 完全取代 var;无需重新赋值的对象和数组多使用 const。

本文部分转载自 阮一峰 的 ECMAScript 6 入门

ES6 随记(1)-- let 与 const的更多相关文章

  1. ES6 随记(3.4.1)-- 函数的拓展(参数默认值,扩展运算符)

    上一章请见: 1. ES6 随记(1)-- let 与 const 2. ES6 随记(2)-- 解构赋值 3. ES6 随记(3.1)-- 字符串的拓展 4. ES6 随记(3.2)-- 正则的拓展 ...

  2. ES6 随记(3.3)-- 数组的拓展

    上一章请见: 1. ES6 随记(1)-- let 与 const 2. ES6 随记(2)-- 解构赋值 3. ES6 随记(3.1)-- 字符串的拓展 4. ES6 随记(3.2)-- 正则的拓展 ...

  3. ES6 随记(3.2)-- 正则的拓展 & 数值的拓展

    上一章请见: 1. ES6 随记(1)-- let 与 const 2. ES6 随记(2)-- 解构赋值 3. ES6 随记(3.1)-- 字符串的拓展 4. 拓展 b. 正则的拓展 首先又是关于 ...

  4. ES6 随记(3.1)-- 字符串的拓展

    上一章请见: 1. ES6 随记(1)-- let 与 const 2. ES6 随记(2)-- 解构赋值 4. 拓展 a. 字符串的拓展 有些字符需要 4 个字节储存,比如 \uD83D\uDE80 ...

  5. ES6 随记(2)-- 解构赋值

    上一章请见: 1. ES6 随记(1)-- let 与 const 3. 解构赋值 a. 数组的解构赋值 let [a1, b1, c1] = [1, 2, 3]; console.log(a1, b ...

  6. JavaScript学习系列5 ---ES6中的var, let 和const

    我们都知道JavaScript中的var,在本系列的 JavaScript学习系列2一JavaScript中的变量作用域 中,我们详细阐述了var声明的变量的作用域 文章中提到,JavaScript中 ...

  7. ES6中不得不说的关键字const

    上一节讲了let关键字,它是用来声明一个变量,只在块级作用域起作用.这一节我们来学习ES6新增的另一个关键字const. const 的作用 const是constant(常量)的缩写,const和 ...

  8. ES6背记手册

    ES6规范 阮一峰的ES6在线教程 在线图书--Exploring ES6 ES6 tutorials babel在线教程--https://babeljs.io/docs/en/learn.html ...

  9. es6学习笔记1 --let以及const

    let语句的基本用法:  1.let声明的变量为块级作用域,只在最近的{}里面有效,如果在外部引用就会报错. { let a = 10; var b = "hello" } ale ...

随机推荐

  1. php 图片上传 文件上传 大小 限制

    nginx  413 Request Entity Too Large Php无法上传文件 查看php脚本运行用户,写个php脚本 <?php echo shell_exec("id ...

  2. nginx 用法

    nginx配置location总结及rewrite规则写法 如何将 /health 重定向到 /health.html https://stackoverflow.com/questions/4614 ...

  3. java 获取网页指定内容

    import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.HttpURLConnection; ...

  4. A Survey of Shape Feature Extraction Techniques中文翻译

    Yang, Mingqiang, Kidiyo Kpalma, and Joseph Ronsin. "A survey of shape feature extraction techni ...

  5. Hibernate查询语言(HQL)

    Hibernate查询语言(HQL)与SQL(结构化查询语言)相同,但不依赖于数据库表. 我们在HQL中使用类名,而不是表名. 所以是数据库独立的查询语言. HQL的优点 HQL有很多优点. 它们如下 ...

  6. Spring MVC隐藏字段域

    以下示例显示如何在使用Spring Web MVC框架的表单中使用隐藏字段(Hidden).首先使用Eclipse IDE来创建一个WEB工程,实现在隐藏字段中指定用户编号的功能.并按照以下步骤使用S ...

  7. libsvm以概率输出单个test样例的判别结果

    在函数svmtrain和svmpredict的输入参数部分加入'-b 1'比如原先是 svmtrain -c 8.0 -g 0.0078125 a1a.scale 修改过后就是 svmtrain -b ...

  8. vivo 手机的USB调试功能

  9. json responseJson

    private void doResoponseJson(HttpServletResponse resp,String jsonString){ Trace.logError(Trace.COMPO ...

  10. jquery 插件 起步代码

    /** * Created by W.J.Chang on 2014/6/25. */ ;(function($) { var methods= { check: function() { retur ...