一、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";
二、es6基础语法
1. let
es6新增的声明变量的关键字
类似于var 但有所不同:
不同:
1) 作用域不同
var声明的变量可以在大括号外调用,let声明的变量只能在代码块内部有效
代码块:我们认为一个大括号可以封闭一个代码块
eg:
for(var i=0; i<10; i++){
console.log(i);
}
console.log(i);//10
for(let i=0; i<5; i++){
console.log(i);
}
console.log(i);//报错 i is not defined
{
let a=10;
}
console.log(a);//报错 a is not defined
2) 没有变量提升
3) 暂时性死区
使用let声明之前的变量都是不可用的
eg:
var a=123;
if(1){
a='abc';//报错 a is not defined
console.log(a);//abc
let a;
// 结束暂时死区
console.log(a);//undefined
a=456;
console.log(a);//456
}
4) 不允许重复声明
let不允许在相同作用域内部重复声明同一个变量,所以也是不允许在函数中重新声明参数
eg:
let b=10; let b=1; console.log(b);//Uncaught SyntaxError: Identifier 'b' has already been declared
2.块级作用域
1) es5 只有全局作用域和函数作用域,没有块级作用域
eg:
var a='hello';
function f() {
//在这个函数中因为有var声明了a,所以其中所有的a都是这个局部作用域的a,与全局作用域的a='hello'没有关系
console.log(a);//undefined
if(a){
var a='你好';
}
console.log(a);//undefined
}
f();
2) let 为 js增加了块级作用域
eg:
var a='hello';
function f() {
console.log(a);//hello
if(a){
let a='你好';
console.log(a);//你好
}
console.log(a);//hello
}
f();
3) es6 允许块级作用域嵌套
4) 外层作用域无法读取内层作用域的变量
5) 内层作用域可以定义与外层作用域的同名变量
eg:
{
let a=1;
{
let a=2;
{
let a=3;
console.log(a);//3
}
console.log(a);//2
}
console.log(a);//1
6) IIFE被抛弃
7) 块级作用域与函数声明
es5 只允许在顶层作用域或函数作用域中声明函数,不能在块级作用域中声明函数
8) do 表达式(暂时不能用)
块级作用域是一个语句,将多个操作封装在一起,没有返回值
在块级作用域以外,没有办法得到内部的值,除非是全局变量
一个提案,使块级作用域可以变为表达式,也就是说可以返回值,就是使用do表达式
3. const常量
1) const 声明一个常量,一旦声明,就不能被改变
2) 常量一旦声明,必须立即初始化,不能留到以后赋值
3) const本质
const其实并不是值不让改变,而是变量指向的内存地址不得改动,对于基本数据类型,值就保存在变量指向的内存地址,所以不能被改变,但是对于对象类型,变量存储的是指针,const能保证这个指针不变,但是数据结构是可以改变的
如果const定义一个数组,数组本身是可写的,但是要想将一个新的数组赋值给这个arr,就会报错
const arr=[];
arr.push('hello');//["hello"]
console.log(arr);
arr=['hello'];//报错 Uncaught TypeError: Assignment to constant variable.
4.顶层对象
es5中顶层对象是window,顶层对象的属性与全局变量是等价的
es6规定,var 和 function 命令是全局变量,依旧是顶层对象的属性,但是let和const,class命令的全局变量不属于顶层对象的属性,也就是说es6开始,全局变量逐渐与顶层对象的属性脱钩
本文主要介绍了ECMAScript 6 (ES6) 的新特性,包括let关键字的作用域规则及用法、块级作用域的概念及其与函数作用域的区别、const声明常量的特点以及ES6对顶层对象的影响。
1万+

被折叠的 条评论
为什么被折叠?



