ES6 随记(1)-- let 与 const
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的更多相关文章
- ES6 随记(3.4.1)-- 函数的拓展(参数默认值,扩展运算符)
上一章请见: 1. ES6 随记(1)-- let 与 const 2. ES6 随记(2)-- 解构赋值 3. ES6 随记(3.1)-- 字符串的拓展 4. ES6 随记(3.2)-- 正则的拓展 ...
- ES6 随记(3.3)-- 数组的拓展
上一章请见: 1. ES6 随记(1)-- let 与 const 2. ES6 随记(2)-- 解构赋值 3. ES6 随记(3.1)-- 字符串的拓展 4. ES6 随记(3.2)-- 正则的拓展 ...
- ES6 随记(3.2)-- 正则的拓展 & 数值的拓展
上一章请见: 1. ES6 随记(1)-- let 与 const 2. ES6 随记(2)-- 解构赋值 3. ES6 随记(3.1)-- 字符串的拓展 4. 拓展 b. 正则的拓展 首先又是关于 ...
- ES6 随记(3.1)-- 字符串的拓展
上一章请见: 1. ES6 随记(1)-- let 与 const 2. ES6 随记(2)-- 解构赋值 4. 拓展 a. 字符串的拓展 有些字符需要 4 个字节储存,比如 \uD83D\uDE80 ...
- ES6 随记(2)-- 解构赋值
上一章请见: 1. ES6 随记(1)-- let 与 const 3. 解构赋值 a. 数组的解构赋值 let [a1, b1, c1] = [1, 2, 3]; console.log(a1, b ...
- JavaScript学习系列5 ---ES6中的var, let 和const
我们都知道JavaScript中的var,在本系列的 JavaScript学习系列2一JavaScript中的变量作用域 中,我们详细阐述了var声明的变量的作用域 文章中提到,JavaScript中 ...
- ES6中不得不说的关键字const
上一节讲了let关键字,它是用来声明一个变量,只在块级作用域起作用.这一节我们来学习ES6新增的另一个关键字const. const 的作用 const是constant(常量)的缩写,const和 ...
- ES6背记手册
ES6规范 阮一峰的ES6在线教程 在线图书--Exploring ES6 ES6 tutorials babel在线教程--https://babeljs.io/docs/en/learn.html ...
- es6学习笔记1 --let以及const
let语句的基本用法: 1.let声明的变量为块级作用域,只在最近的{}里面有效,如果在外部引用就会报错. { let a = 10; var b = "hello" } ale ...
随机推荐
- php 图片上传 文件上传 大小 限制
nginx 413 Request Entity Too Large Php无法上传文件 查看php脚本运行用户,写个php脚本 <?php echo shell_exec("id ...
- nginx 用法
nginx配置location总结及rewrite规则写法 如何将 /health 重定向到 /health.html https://stackoverflow.com/questions/4614 ...
- java 获取网页指定内容
import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.HttpURLConnection; ...
- A Survey of Shape Feature Extraction Techniques中文翻译
Yang, Mingqiang, Kidiyo Kpalma, and Joseph Ronsin. "A survey of shape feature extraction techni ...
- Hibernate查询语言(HQL)
Hibernate查询语言(HQL)与SQL(结构化查询语言)相同,但不依赖于数据库表. 我们在HQL中使用类名,而不是表名. 所以是数据库独立的查询语言. HQL的优点 HQL有很多优点. 它们如下 ...
- Spring MVC隐藏字段域
以下示例显示如何在使用Spring Web MVC框架的表单中使用隐藏字段(Hidden).首先使用Eclipse IDE来创建一个WEB工程,实现在隐藏字段中指定用户编号的功能.并按照以下步骤使用S ...
- libsvm以概率输出单个test样例的判别结果
在函数svmtrain和svmpredict的输入参数部分加入'-b 1'比如原先是 svmtrain -c 8.0 -g 0.0078125 a1a.scale 修改过后就是 svmtrain -b ...
- vivo 手机的USB调试功能
- json responseJson
private void doResoponseJson(HttpServletResponse resp,String jsonString){ Trace.logError(Trace.COMPO ...
- jquery 插件 起步代码
/** * Created by W.J.Chang on 2014/6/25. */ ;(function($) { var methods= { check: function() { retur ...