初识ES6
一. 块级作用域、变量let、常量const
- 由一对 { } 界定的语句叫做块语句,这在其他编程语言中叫做复合语句。
一般理解的块:
块:由{}包括住
if(){}:是一个块
for(){}:是一个块
这些也可理解成块:
一个函数:函数作用域
<script>标签:全局作用域
- JS中用var声明的变量是没有块级作用域的,只有函数作用域和全局作用域。
var x = 1;
{
var x = 2;
}
console.log(x);
//会输出2,因为块中的var语句与块前面的var语句作用域相同
//在C或Java中,这段代码会输出 1
//这代码证明了var没有块作用域
- 相比之下,使用 let 和 const 声明的变量是有块级作用域的。
let x = 1;
{
let x = 2;
}
console.log(x);
// 输出 1
// x被限制在块级作用域中
// 这里将let换成const结果也一样
- const的概念
- 必须在声明的同一语句中指定它的值
- const声明创建一个值的只读引用,也就是说只能通过const定义的变量来读这个值,不能修改这个值,但是如果这个值本身发生了变化,那么const定义的变量所对应的值也就跟着变化,比如当引动内容是对象的情况下。
- 一个常量不能和它所在作用域内的其他变量或函数拥有相同的名称。
// 下面错误,常量要求有一个初始值
const FOO;
// 下面正确,常量可以定义成对象
const MY_OBJECT = {"key": "value"};
// 下面错误,改变常量会失败
MY_OBJECT = {"OTHER_KEY": "value"};
// 对象属性并不在保护的范围内,下面会成功执行(对象本身发生变化)
MY_OBJECT.key = "otherValue";
// 定义一个常量
const MY_FAV = 20;
// 不能同名,会出错
var MY_FAV = 20;
// 也会报错
let MY_FAV = 20;
二. 箭头函数
基础语法
//一般语法:
(参数1, 参数2, …, 参数N) => { 函数声明 }
//相当于:(参数1, 参数2, …, 参数N) =>{ return 表达式; }
(参数1, 参数2, …, 参数N) => 表达式(单一)
// 当只有一个参数时,圆括号是可选的:
(单一参数) => {函数声明}
单一参数 => {函数声明}
// 没有参数的函数应该写成一对圆括号
() => {函数声明}
高级语法:
(*注: 字面量一般指[1, 2, 3] 或者{name: “mdn”} 这种简洁的构造方式)
*//加括号的函数体返回对象字面表达式:
参数=> ({foo: bar})
//支持剩余参数和默认参数
(参数1, 参数2, ...rest) => {函数声明}
(参数1 = 默认值1,参数2, …, 参数N = 默认值N) => {函数声明}
//同样支持参数列表解构
let f = ([a, b] = [1, 2], {x: c} = {x: a + b}) => a + b + c;
f(); // 6
重点注意:
this 对象的指向是可变的,但是在箭头函数中,它是固定的。箭头函数体内的 this 对象,就是定义时所在的对象,而不是使用时所在的对象。