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 ...
随机推荐
- Vuex 2 入门与提高。
从计数器开始 让我们从一个简单的计数器,开始进入Vuex 的世界: 计数器应用的数据模型很简单:使用一个counter属性来表示计数器的 当前值就够了. 在Vue实例的created钩子 中,应用启动 ...
- ImageData
http://www.html5china.com/HTML5features/canvas/20120501_3591.html 1.上下文对象 Context 有三个方法用来创建.读取和设置 Im ...
- 一个基于 EasyUI 的前台架构(3)封装操作Tabs的JS代码
一般来说,系统框架的主内容区会引入另一个独立的 Web 页面来实现系统的功能,所以在在 Tabs 里的每一个标签页里使用 iframe 标签来引入子页面.所以这里可以将 Tabs 的 Content ...
- VBA 字符串操作
Trim(string) 去掉string左右两端空白 Ltrim(string) 去掉string左端空白 Rtrim(string) 去掉string右端空白 Len(string) 计算stri ...
- 从 ie10浏览器下Symbol 未定义的问题 探索vue项目如何兼容ie低版本浏览器(ie9, ie10, ie 11 )
问题: vue项目在ie11下一片空白并报Symbol 未定义的错 原因: ie10浏览器解析不了es6的语法,需要我们使用babel(Babel是一种工具链,主要用于将ECMAScr ...
- asp.net 2.0里也可以用JSON的使用方法
本人找到一份,可以在asp.net2.0里实现JSON方式传送数据的方法.但是原方法,不能在数据中带有{.}.[.]."等,所以我做特意做了转意. 全部代码如下. /// <summa ...
- javascript iframe 操作(一)
[兼容所有浏览器 包括IE7/8/9] 1.父页面中获取IFRAME的WINDOW对象 获得了window对象后,就可以调用iframe页面中定义的方法等. IE:可以通过iframeId.windo ...
- day4笔记
今日讲解内容:1,int数字:运算.1 ,2,3... # 数字类型:int #范围.用于运算, + - * / // %.... bit_lenth :十进制数字用二进制表示的最小位数 a=10 p ...
- matlab7.0安装 win7系统详细使用方法附软件下载
MATLAB 7.0下载地址: 百度网盘下载地址:http://pan.baidu.com/share/link?shareid=414204&uk=2769186556 迅雷快传下载地址:h ...
- 获取字符串已utf-8表示的字节数
private static int utf8Length(String string) { /** Returns the number of bytes required to write thi ...