1,讲讲浅拷贝、深拷贝之间的区别核心:引用类型和非引用类型的拷贝结果是不同的浅拷贝只是拷贝基本类型的数据,如果父对象的属性等于数组或另一个对象,那么实际上,子对象获得的只是一个内存地址,因此存在父对象被篡改的可能,浅拷贝只复制指向某个对象的指针,而不复制对象本身,新旧对象还是共享同一块内存//简单的浅拷贝var a = 1;var b = a;//赋值console.log(b) //1a = 2;//改变a的值console.log(b) //1如果要实现深拷贝,用什么方法来实现 JSON.parse() + JSON.stringify()(缺点:只能处理可以被枚举的属性); for in 循环递归遍历; 深拷贝就是能够实现真正意义上的数组和对象的拷贝。递归调用"浅拷贝"。(深拷贝会另外创造一个一模一样的对象,新对象跟原对象不共享内存,修改新对象不会改到原对象)如果你想要实现支持setter和getter特性的拷贝,该怎么实现? Object.defineproperties (定义属性)、Object.getOwnPropertyDescriptors(es2017,获取对象的多个属性)、Object.getOwnPropertyDescriptor(老一点,获取对象的单个属性的属性),但babel可以解决。2、原型链的prototype和__proto__的区别;prototype 在 new 示例后会被转为 __proto____proto__是非标准化的;所有东西的原型链向上延伸到原型链的顶端,是什么;Object.prototype.proto,结果是null.Function本身就是函数,Function.__proto__是标准的内置对象Function.prototype,Function.prototype.__proto__是标准的内置对象Object.prototype3、如果想实现继承,说几种你知道的方法?原型链继承、构造继承、实例继承、拷贝继承、组合继承、寄生组合继承原型链继承3、var、let、const的区别;var 会变量提升;let 声明的变量只在它所在的代码块有效;const 声明后不能再修改其指向的目标,假如const 指向的是一个对象/数组,那么虽然不能更改指向目标,但是可以更改对象和数组内部的值;进阶一:说到变量提升,class 声明一个类时,存在变量提升么?为什么?不存在。因为要方便类的继承,先声明子类再声明父类;进阶二:const 声明一个对象,如何让对象内部的属性的值也无法改变?使用Object.freeze()锁死(es5新增特性);对数组等引用类型的值,还是能修改的;进阶三:全局作用域?函数作用域?块级作用域?作用域链?