面试题-ES6篇
1. 块级作用域(必会)
- 在ES5中,有全局作用域和函数作用域,以var定义的变量没有块级作用域的概念,可以跨块访问,不能跨函数访问;
- 在ES6中,块级作用域指的是在大括号或者if、else、for、while等语句中,以let定义的变量或const定义的常量只能在块级作用域里访问且不存在变量提升和重复声明,此外const定义的常量必须初始化赋值且不能修改。
2. Var、let、const区别?(const定义对象和数组后可以修改) (必会)
- Let、const有块级作用域、暂时性死区;
- Let、const不存在变量提升和重复性声明;
- Let、const声明的全局变量不会挂在顶层对象下面;
- Let定义变量,const定义常量且不可改变。
3. 构造函数和普通函数的区别 (问到过,背一下)
- 构造用new调用;
- 构造内部可以使用this,普通不建议,会指向window;
- 构造没有return返回值
- 构造首字母大写。
4. 箭头函数和普通函数的区别(问到过,背一下)
- 箭头函数语法简单,清晰;
- 箭头函数没有prototype,所以本身没this;
- 箭头函数不会创建自己的this;
- Call/apply/bind无法改变this指向;
- 不能作为构造函数使用;
5. es6的新特性(必会,至少背几个吧)
- Let和const
- 解构赋值
- Includes可以判断一个数组是否包含一个指定的值,包含返回true,反之false
- 字符串、数值、函数、数组、对象的扩展
- Module导入模块
- Promise和async的运用
- Symbol
- Set和map
- Class
6. Promise(肯定得了解阿,适当背一下)
- Promise是es6提出的异步编程解决方案,解决了异步编程的回调地狱问题;
- Promise是一个构造函数,需要new关键字来生成它的实例对象;
- Promise接受一个函数作为参数,函数中的代码在new promise的时候会立即执行,我们可以再这里执行异步操作,并存在两个参数resolve和reject,也是函数,用来标记异步执行的状态,通过.then回调异步完成的回调,.catch则是失败的回调;
- Finally方法是最后都会执行的方法;
- all方法是几个条件都达成才能返回成功;
- Rice方法是几个条件都不满足才返回失败。