箭头函数的注意事项
1.箭头函数中的this取决于函数的定义,而非调用:
function a(){ setTimeout(()=>console.log(this.age),100) } a.call({age:18}) // function a(){ // setTimeout(function(){ // console.log(this.age) // },100) // } // a.call({age:123})
两次调用都使用了call改变函数a的this指向,注释代码打印结果是window,而在箭头函数内的打印结果是调用所传入的对象。为啥呢?setTimeout调用了内部函数,普通函数的this指向是取决于函数的调用对象,意思也就是谁调用,那么this 就是谁,setTimeout实际上是window.setTimeout,所以注释代码打印结果是window;箭头函数的this并不取决于函数的调用而是取决于函数的定义,上述代码内的箭头函数是在a的函数体内定义的,那么箭头函数的this=a的this,调用a时改变了a的this指向让其=传入对象,所以在箭头函数内的打印结果是调用所传入的对象;(感觉好像有点绕 QAQ)
2.箭头函数不可以new,这个好理解,因为他不是构造函数,所以不能new;
3.箭头函数不可以使用arguments获取参数列表,可以使用rest代替:
let name=(...rest) => { console.log(rest) //console.log(arguments) } function a(){ console.log(arguments[0]) } a(1,2,3,4,5); name(1,2,3,4,5,6);
在箭头函数内使用arguments会报未定义,这里rest是形参,可以自定义的,这样也是可以的
let name=(...a) => { console.log(a) //console.log(arguments) }
好了,以上就是个人在学习箭头函数时总结的,大神轻喷 *(੭*ˊᵕˋ)੭*