1 前言
由于我在简历中写我了解es6,所以杭州有赞的面试官问了我很多es6的问题
es6是JS的国际标准化组织在15年推出的新版本JS
es6的详细介绍可以看阮一峰老师的开源书籍:
http://es6.ruanyifeng.com/#docs/intro
由于主要内容来自阮一峰老师的开源书籍,所以本篇文章被我标记为转载。
2 let和var的区别
2.1 let不存在var的变量提升
什么是变量提升,即JS变量可以先使用,后声明。(这在一般的语言:Java, C中不存在的)
如果var声明的变量在之前被使用,是不会报错的,当然那时候的值是undefined
// var 的情况
console.log(foo); // 输出undefined
var foo = 2;
let声明的变量提前被使用的话,则会报错
// let 的情况
console.log(bar); // 报错ReferenceError
let bar = 2;
2.2 暂时性死区
暂时性死区=》新增块级作用域
只要块级作用域内存在let
命令,它所声明的变量就“绑定”(binding)这个区域,不再受外部的影响。
var tmp = 123;
if (true) {
tmp = 'abc'; // ReferenceError
let tmp;
}
总之,暂时性死区的本质就是,只要一进入当前作用域,所要使用的变量就已经存在了,但是不可获取,只有等到声明变量的那一行代码出现,才可以获取和使用该变量。
2.3 不允许重复声明
不允许重复声明
let不允许在相同作用域内,重复声明同一个变量。
// 报错
function () {
let a = 10;
var a = 1;
}
// 报错
function () {
let a = 10;
let a = 1;
}
3 const
const声明的是一个常量
与let相同,都存在从2.1到2.3的3点特征(这点在面试时候竟然回答上来了,我自己都觉得惊奇)
对于引用类型,const指向的是一个内存地址,所以只能保证指针固定。
对于一个const数组而言,我们可以往数组里添加内容
比如这样:
const a={};
a.b='c';//可执行