广州粤嵌前端面试题
1、常用的es6语法有哪些?
let、const定义变量;解构赋值;模板字符串;箭头函数;函数参数默认值
2、var、let、const的区别
var存在变量提升,能在声明之前使用。let、const因为暂时性死区的原因,不能在声明前使用; var在全局作用域下声明变量会导致变量挂载在window 上,其他两者不会;let和const作用基本一致,但是后者声明的变量不能再次赋值。
3、箭头函数和普通函数的区别
1) this的指向。普通函数的this指向window,可以通过bind、call、 apply改变this指向。箭头函数的this指向的是父级作用域的this,如果外层有普通函数,指向普通函数,没有就指向window。node环境没有window,它的this指向{}空对象。
2)箭头函数不可以被当作构造函数。通过new命令来作为构造函数会报错,不存在prototype
这个属性,也不能通过super访问原型的属性。
3)不可以使用arguments对象,该对象在函数体内不存在,如果要用就用rest参数替代。
4、简述—下原型和原型链
原型:每个函数都有prototype属性,该属性指向原型对象;使用原型对象的好处是所有对象实例共享它所包含的属性和方法。
原型链:主要解决了继承的问题;每个对象都拥有一个原型对象,通过_proto_指针指向其原型对象,并从中继承方法和属性,同时原型对象也可能拥有原型,这样一层一层,最终指向null。
5、实现继承的几种方法
1)原型链继承。将父类的实例作为子类的原型。
2)组合继承。通过调用父类构造,继承父类的属性并保留传参的优点,然后通过将父类实例作为子类原型,实现函数复用。
3)寄生组合继承。通过寄生方式,砍掉父类的实例属性,这样,在调用两次父类的构造的时候,就不会初始化两次实例方法/属性,避免的组合继承的缺点。
参见继承的6种方式
6、堆和栈的区别
1)堆。动态分配内存,内存大小不一,也不会自动释放。
2)栈。自动分配相对固定大小的内存空间,并由系统自动释放。
3)基本类型都是存储在栈中,每种类型的数据占用的空间的大小是确定的,并由系统自动分配和释放。内存可以及时回收。4)引用类型的数据都是存储在堆中。准确说是栈中会存储这些数据的地址指针,并指向堆中的具体数据。
7、数组去重的方法有哪些
1)利用es6的Set数据结构。它类似于数组,其成员的值都是唯一的。
2) filter过滤函数去重。indexOf查函数中如果存在该项会返回它的index,不存在返回1
const的作用
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论