前端面试纪实(三):ES6的const和let

来源:互联网 发布:微信公众号矩阵案例 编辑:程序博客网 时间:2024/05/16 04:43

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); // 输出undefinedvar foo = 2;
let声明的变量提前被使用的话,则会报错
// let 的情况console.log(bar); // 报错ReferenceErrorlet 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';//可执行
原创粉丝点击