箭头函数和普通函数的区别

2021-04-10  本文已影响0人  Marshall3572

定义:箭头函数没有function关键字,而是一个类似箭头的函数。

var a = () => {
    return 1;
}

等价于

function a(){
    return 1;
}

区别:

var A = () => {
    return 1;
}
var a = new A(); //TypeError: A is not a constructor
function A(a){
  console.log(arguments); //[object Arguments] {0: 1}
}

var B = (b)=>{
  console.log(arguments); //ReferenceError: arguments is not defined
}

var C = (...c)=>{ //...c即为rest参数
  console.log(c); //[3]
}
A(1);
B(2);
C(3);
var obj = {
  a: 10,
  b: function(){
    console.log(this.a); //10
  },
  c: function() {
     return ()=>{
           console.log(this.a); //10
     }
  }
}
obj.b(); 
obj.c()();
var obj = {
  a: 10,
  b: () => {
    console.log(this.a); //undefined
    console.log(this); //window
  },
  c: function() {
    console.log(this.a); //10
    console.log(this); //obj{...}
  }
}
obj.b(); 
obj.c();
var obj = {
  a: 10,
  b: function(n){
    var f = (v) => v + this.a;
    return f(n);
  },
  c: function(n) {
    var f = (v) => v + this.a;
    var m = {a:20};
    return f.call(m,n);
  }
}

console.log(obj.b(1)); //11
console.log(obj.c(1)); //11
var a = (){
    return 1;
}

function b(){
    return 2;
}

console.log(a.prototype); // undefined
console.log(b.prototype); // object{...}

对于函数的this指向问题,我总结了下面两句话:

  1. 箭头函数的this永远指向其上下文的 this,任何方法都改变不了其指向,如call(), bind(), apply()
  2. 普通函数的this指向调用它的那个对象
上一篇下一篇

猜你喜欢

热点阅读