一,es6简介(ECMAscript 6)
ECMAscript 是一种标准
ECMAscript 5.1 es5 是我们学习的版本
es6 是2011年发布的es5的下一个版本,2015.6发布了es2015 而生
的第一个版本,2016.6发布es6的第二个版本es2016,2017年发布第三个版本,es2017
es6 涵盖了es2015,es2016,es2017三个版本
我们可以认为es6是严格模式的es5
严格模式就是 HTML5 和 xhtml1.0的区别
"use strict"
二,es6基础语法
1,变量声明关键词 let
es6新增加的变量声明关键词
类似var但不同于var,两者可以混合使用
不同之处:
1,作用域不同
var 声明的变量可以在大括号外使用(if,for,{},),let声明的变量只能是
大括号内部使用,外部无法使用
代码块:在es6中我们认为,任何大括号都能隔离一个独立的作用域,叫做代码块
2,没有变量声明提升
3,暂时性死区
在使用let声明变量之前是不能使用这个变量的
4,不允许重复声明变量
let不允许在相同作用域中重复声明变量,当然函数中也不允许使用let重新声明参数
2,块级作用域
1 es5中的作用域有哪些?全局作用域和函数作用域并没有块级作用域
2) es6 增加了块级作用域
es6中 任何 {} 就是一个独立块级作用域
3)es6 允许块级作用域嵌套
4) 内层作用域可以读取外层变量,但是外层不能读取内层变量
5) 内层作用域可以声明与外层作用域相同的变量
6) IIFE代码块隔离功能取消
7) 块级作用域与函数声明
es5中函数只能在全局作用域或函数作用域中声明
不能再if语句或for语句的大括号中声明;但是如果声明了还能正常使用,不会报错
8)do 语法表达式 (只是提案,暂不能用)
块级作用域是一个语句,能够将多个操作封装在一起,但是没有返回值
在块级作用域以外,没有办法得到其中的变量,除非是全局变量
一个提案:将块级作用域变为表达式,也就是说可以有返回值,就是使用 do语句
3,const 常量定义关键字
1)const 声明一个常量,一旦声明,无法改变
2)常量一旦声明,就必须初始化(赋值),不能留到以后赋值
3)const 常量的本质
const 其实并不是不让改变值,而是变量的指针指向内存地址不能改动,对于基本数据
类型,值就保存在变量指向的内存地址中,所以不能被改变,但是对于对象类型,变量
存储的是指针,指针指向的是对象的首地址,const 保证这个指针不变,但是数据结构可以
通过对象改变
如果 const 指向一个数组(Array),数组本身是可写的,但是想要将一个新的数组赋值给这个
数组,会报错,改变数组中的某个元素,不会报错
4,顶层对象
es5 当中顶层对象是 window,顶层对象的属性与全局变量是等价的;
es6 当中,var function 关键字声明的全局变量,依然等价与顶层对象的属性,但是,
let,const,class等关键字声明的全局变量将不属于window,也就是说,
es6 开始,全局变量逐渐与顶层对象window属性开始脱钩