ES5-ES6

一,es6简介
    ECMAScript 是一个标准
    ECMAScript 5.1  es5   2011年发布
    es6 就是es5的下一个版本,2015年6月es6的第一版 es2015,2016年的6月发布es6的第二个版本  es2016
    2017年发布es6de 第三个版本,简称第三个版本,es2017
    es6 是涵盖了es2015 ,es2016 ,es2017等版本
    es6是严格版的es5
    html5 和 Xhtml1.0
    "use strict";
二,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 只允许在顶层作用域或函数作用域中声明函数,不能再块级作用域中声明函数
        8)do 表达式 (暂时不能用)
            块级作用域是一个语句,将多个操作封装在一起,没有返回值
            在块级作用域以外没有办法得到内部的值,除非是全局变量
            一个提案,是块级作用域可以变为表达式,也就是说可以返回值,就是使用do表达式
    3,const常量
        1)const 声明一个常量,一旦被声明,就不能被改变
        2)常量一旦声明,必须立即初始化,不能留到以后赋值
        3)const 本质
            const其实并不是值不让改变,而是变量指向的内存地址不得改变,对于基本数据类型,值就保存在变量指向的内存地址,所以不能被改变,但是对于对象类型,变量存储的是指针,const能保证这个指针不变,但是数据结构是可以改变的
            如果const定义一个数组,数组本身是课写的,但是要想将一个新的数组赋值给这个arr,就会报错
        4)顶层对象
            es5中顶层对象是window,顶层对象的属性与全局变量是等价的
            es6规定,var和function是全局的变量,依旧是顶层对象的属性,但是let和const,class命令的全局变量不属于顶层对象的属性,也就是说es6开始,全局变量逐渐与顶层对象的属性脱钩


猜你喜欢

转载自blog.csdn.net/xiaolihui321/article/details/81208194