一、箭头函数和普通函数的区别
1.箭头函数函数使用箭头定义
//写法格式
//1.普通函数
let fn01 = function () {
console.log("fn01");
}
function fn02() {
console.log("fn02");
}
//2.箭头函数
let fn03 = () => {
console.log("fn03");
}
2.箭头函数不能作为构造函数使用
//箭头函数不能作为构造函数来使用,因为箭头函数没有自己的this
//作为构造函数使用
//普通函数-用作构造函数
function Person(name) {
this.name = name;
}
const p = new Person("张三");
console.log(p); //{name: '张三'}
//箭头函数-用作构造函数会报错
const fn = (a) => {
console.log(a);
};
fn(1); //1
// console.log(new fn(1)); //Uncaught TypeError: fn is not a constructor
3.箭头函数中没有this和arguments
//arguments
//每一个普通函数调用后都具有一个arguments对象,用来存储实际传递的参数。
//箭头函数中访问arguments如果存在,则是来自于他的外层普通函数的arguments
//普通函数中arguments:
function sum(a) {
console.log(arguments);//Arguments(3) [1, 2, 3, callee: ƒ, Symbol(Symbol.iterator): ƒ]
console.log(arguments[0]);//1
}
sum(1, 2, 3);
//箭头函数没有arguments对象
const sum = () => console.log(arguments);//arguments未定义
sum(); //Uncaught ReferenceError: arguments is not defined
4.箭头函数不具有prototype原型对象
//prototype原型
//普通函数具有prototype原型属性
//箭头函数没有prototype原型属性
//箭头函数
var a = () => 1;
//普通函数
function b() {
return 2;
}
console.log(a.prototype); // undefined
console.log(b.prototype); // {constructor: ƒ}constructor: ƒ b()[[Prototype]]: Object
5.箭头函数不具有super
二、深浅拷贝 区别以及如何进行深拷贝
场景:
说深拷贝和浅拷贝,特指引用类型。
区别:
深拷贝: 把引用类型的地址及其它的数据都拷贝一份
浅拷贝: 只拷贝了引用类型的地址
// 功能:封装一个深拷贝的函数
// 参数:被拷贝的对象
// 返回值:拷贝的对象
function copyObj(obj){
let newObj ={};
for(let key in obj){
if(typeof obj[key] == "object"){ //如果说当前属性是对象的话,那么再做深拷贝
newObj[key] = copyObj(obj[key]);
}else{
newObj[key] = obj[key];
}
}
return newObj;
}
var obj1= {
name:"小明",
sex:"男",
address:{
province:"陕西",
city:"西安"
}
}
let obj2 = copyObj(obj1);