什么是箭头函数?
()=>{}
箭头函数是ES6新增的一个语法糖,使用箭头函数书写更加的简洁方便;
箭头函数语法:
如果箭头函数有参数,则需要用()括起来,若只有一个参数,括号可以省略不写
a=>a
a=>{}
()=>{}
(a,b)=>{}
如果要执行的代码不止一行,需要用{}括起来
箭头函数在某些方面与普通函数有些差异……
- 普通函数this指向调用它的对象,没有调用者的时候指向顶级对象window;箭头函数没有自己的this,它的this指向父级对象的上下文(父级所在的作用域对象,不懂就console.log出来看),也就是说箭头函数一旦定义完成,它的指向是固定的,没法改变,它的指向是定义时所在的作用域,而不是执行时的作用域.
//对上面迷茫的话,你需要明白一个知识点作为补充,js没有对象作用域!
//例如
a={
b:1,
c:function(){
return this.b //使用this是因为对象没有作用域,单独写b无法拿到a里面的b
}
}
a.c() //1 //调用者是a,this指向a
//
a = '全局变量a'
let obj = {
a: '局部变量a',
fn1: function () {
console.log('fn1'+this.a);
},
fn2: () => {
console.log('fn2'+this.a);
}
}
obj.fn1() //局部变量a 普通函数,调用者是obj,this指向obj
obj.fn2() //全局变量a 箭头函数,没有this,定义时的this指向父级obj的所在作用域window
- 箭头函数没有arguments对象
// let f=()=>{
// console.log(arguments); //undefined
// }
let f=function(){
console.log(arguments); //类数组
}
f()
- 箭头函数不能作为构造函数
var fn = ()=>{
console.log("123");
}
new fn(); //Uncaught TypeError: fn is not a constructor