一、es6简介
ECMAScript 是一个标准
ECMAScript 5.1 es5 2011年发布
es6就是es5的下一个版本
2015.6发布es6的第一版 es2015 ; 2016.6发布es6的第二个版本 es2016 ; 2017发布es6的第三个版本 es2017
es6是涵盖了es2015,es2016,es2017等版本
es6是严格版的es5
html5 和 xhtml1.0
"use strict";
严格模式下:
1.严格模式下不允许使用没有经过var声明的变量
2.this指向的是undefined,因为没有所有者,
好处:避免在函数内容访问全局作用域
3.delete
1).delete不能删除var定义的变量,2.没有在严格模式下 delete可以删除var声明的变量或函数
2).没有写严格模式的时候形参名字一样的时候打印形参会是后面的实参2.在严格模式下,参数名不能相同
3).严格模式下,不接受系统保留字或者关键字
二。es6基础语法
1.let
es6新增的声明变量的关键字
类似于var 但有所不同:
不同:
1)作用域不同
var 声明的变量可以在大括号外调用,let声明的变量只能在代码块内部有效
代码块:我们认为一个大括号可以封闭一个代码块
2)没有变量提升(只提升声明部分,不提升赋值部分)
3)暂时性死区
使用let声明之前的变量都是不可用的
4)不允许重复声明
let不允许在相同作用域内部重复声明同一个变量,所以也是不允许在函数中重新声明参数
2.块级作用域
1)es5 只有两个作用域 全局作用域和函数作用域,没有块级作用域
2)let 为js增加了块级作用域
3)es6 允许块级作用域嵌套
4)外层作用域无法读取内层作用域的变量
5)内层作用域可以定义与外层作用域的同名变量
6)IIFE被抛弃
7)块级作用域与函数声明
es5 只允许在顶层作用域或函数作用域中声明函数,不能在块级作用域中声明函数
es6 引入了块级作用域,明确允许在块级作用域中声明函数
es6 中在块级作用域中声明函数相当于使用了let,在块级作用域以外是不能调用的
8)do 表达式(暂时不能用)
块级作用域是一个语句,将多个操作封装在一起,没有返回值
在块级作用域以外,没有办法得到内部的值,除非是全局变量
一个提案,使块级作用域可以变为表达式,也就是说可以返回值,就是使用do
3.const常量
1)const 声明一个常量,一旦声明,就不能被改变
2)常量一旦声明,必须立即初始化,不能留到以后赋值
3)const本质
const本质并不是值不让改变而是变量指向的内存地址不得改动,对于基本数据类型,值就保存在变量指向的内存地址,所以不能被改变,但是对于对象类型,变量存储的只是一个指针,const能保证这个指针不变,但是数据结构是可以改变的
如果const定义一个数组,数组本身是可写的,但是要想将一个新的数组赋值给这个arr,就会报错
4.顶层对象
es5中顶层对象是window,顶层对象的属性与全局变量是等价的
es6规定,var 和 function命令是全局变量,依旧是顶层对象的属性,但是let和const,class命令的全局变量不属于顶层对象的属性,也就是说es6开始,全局变量逐渐与顶层对象的属性脱钩
es6 兼容浏览器
1)允许块级作用域声明函数
2)函数声明类似于var,会将函数声明提升到全局作用域或函数作用域的头部
3)函数声明会提升到块级作用域的头部
这三条规则在浏览器的es6环境下使用