JS中的箭头函数与普通函数的区别

箭头函数的定义

箭头函数是匿名函数,不能作为构造函数,它使表达更加简洁,简化了回调函数

箭头函数最重要的:this指向问题

  • 箭头函数的this指向的是父级作用域中的this,是通过查找作用域链来确定this的值,指向的是定义它的对象,而不是使用时所在的对象。
//普通函数中,this总是指向调用它的对象,如果用作构造函数,this指向创建的对象实例
let obj1 = {
    a:function(){
        console.log(this)
    }
    b:()=>{
        console.log(this)
    }
}
obj.a()//this指向obj
obj.b()//this指向window

let obj2  = {
    fun:function(){
        return ()=>{
            console.log(this)
        }
    }
}
//箭头函数的this指向定义的时候、外层第一个普通函数的this
//这里箭头函数指向的是 fun函数,fun函数指向的是obj2,所以这里this会指向obj2
obj2.fun()() //this指向obj2
  • 箭头函数中的this只在箭头函数定义时就决定的,而且不能修改(call(),apply(),bind())
let obj1 = {
    a:function(){
        console.log(this)
    }
    b:()=>{
        console.log(this)
    }
}
obj.a()//this指向obj
obj.b()//this指向window
obj.b().call(obj) //this还是会指向window,指向不能被修改
箭头函数不能当做构造函数(不能被new)

不能被当做构造函数使用,通过new命令来作为构造函数会报错,不存在prototypepe属性。

let fun = ()=>{
    return 123
}
console.log(new fun()) //会报错
console.log(run.prototype)//undefined
箭头函数没有arguments对象

每个普通函数调用后都具有一个arguments对象,用来存储实际传递的参数。但是箭头函数没有此对象

function f1(arr) {
     console.log(arguments);
}
f1([1,2,3]); // [1,2,3]
let f2 = (arr) => {
   console.log(arguments);
}
f2([1,3,9]); //Uncaught ReferenceError: arguments is not defined
总结:
  • 1.箭头函数this指向外层第一个普通函数this的指向,且不能修改指向,如call(),bind(),apply()。
  • 2.普通函数的this指向调用它的那个对象,谁调用指向谁。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容