「这是我参与11月更文挑战的第16天,活动详情查看:2021最后一次更文挑战」
箭头函数和普通函数的区别
(1)箭头函数没有自己的this
首先,对于普通函数而言,会根据自己如何被调用来指向自己的this。构造函数指向新的对象实例;如果该函数是一个对象的方法,this指向这个对象;严格模式就是undefined
箭头函数则不会自动创建this的指向,它会自动从自己的上一层作用域去继承this。不需要再将this赋予给封闭变量来确保this不会误指向其他不需要的对象
//1.this是静态的,this始终指向函数声明时所在作用域下的this的值
function getname1(params) {
console.log(this.name);
}
let getname2=()=> {
console.log(this.name);
}
//设置window对象的name属性
window.name='波比'
const hero={name:"男刀"}
//直接调用
getname1();//波比
getname2();//波比
//call方法调用
getname1.call(hero)//男刀
getname2.call(hero)//波比
(2)call和apply方法的调用
因为没有this,箭头函数内的this仅仅充当参数的作用,不能将其绑定到this,也就是不能修改this
(3)严格模式下的规则,所有的this相关的引用会直接失效,无法取用
(4)自身无法绑定Arguments对象,可以使用不定长度的剩余函数(...rest)。但可以引用上一层的作用域的arguments对象。
let addarguments=()=>{
console.log(arguments);
}
addarguments(1,2,3)
(5)没有构造函数,没有原型。所以new字段不能对箭头函数有效,箭头函数也没有prototype
let Person=(name,age) =>{
this.name=name;
this.age=age;
}
let me=new Person('娜美',30);
console.log(me);
函数的使用
// 声明一个函数
let fn =function(){
console.log("普通函数");
}
let add=(a,b)=>{
return a+b
}
//调用函数
let result=add(1,2)
console.log(result);//3
箭头函数的缩写
省略小括号:当形参有且只有一个的时候
省略花括号:当代码体只有一条语句的时候,此时return必须省略,而且语句的执行结果就是函数的返回值
// 1)省略小括号
add= n =>{
return n+n;
}
console.log(add(9));
// 2)省略花括号
let pow = n => n*n;
console.log(pow(9));