ES6- 箭头函数的使用

Posted congxueda

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ES6- 箭头函数的使用相关的知识,希望对你有一定的参考价值。

ES6可以使用“箭头”(=>)定义函数

语法

首先是写法上的不同:

    // es5
    var fn = function (x, y) {
      return x + y;
    }

    // es6 箭头函数写法,当函数直接被return时,可以省略函数体的括号
    const fn = (x, y) => x + y;

    // es5
    var foo = function () {
      var x = 10;
      var y = 20;
      return x + y;
    }

    // es6
    const foo = () => {
      const x = 10;
      const y = 20;
      return x + y;
    }

 

ps:箭头函数可以替换函数表达式,但是不能替换函数声明

其次还有一个至关重要的一点,那就是箭头函数中,没有this。如果你在箭头函数中使用了this,那么该this一定就是外层的this。

 ES5

 var name = "window";
    var obj = {
      name: "kxy",
      sayName: function () {
        console.log(this.name);
      }
    };
    obj.sayName();  //kxy

 

使用ES6

 var name = "window";
    var obj = {
      name: "kxy",
      
      sayName: () => {
        console.log(this.name);
      }
    };
    obj.sayName();  //window

 

换一种写法

    var name = "window";
    var obj = {
      name: "kxy",
      
      sayName: function () {
        setTimeout(() => {
          console.log(this.name);
        }, 1000);
      }
    };
    obj.sayName();  //kxy

编译后ES5:

var name = "window";
var obj = {
  name: "kxy", 
  sayName: function sayName() {
    var _this = this;  // 注意这里

    setTimeout(function () {
      console.log(_this.name);
    }, 1000);
  }
};
obj.sayName(); //kxy

 

箭头函数和普通函数区别

 

 不能作用构造函数,不能使用new

 箭头函数不绑定arguments,取而代之用rest参数...

 箭头函数不绑定this,会捕获其所在的上下文的this值,作为自己this值

call 或 apply 方法调用函数,只是传入参数而已 对this 并没有影响。

箭头函数没有原型属性

 

箭头函数没有它自己的this值,箭头函数内的this值继承自外围作用域。在箭头函数中调用 this 时,仅仅是简单的沿着作用域链向上寻找,找到最近的一个 this 拿来使用

 

This的指向 (用法)(this 阮一峰)

thisjavascript 语言的一个关键字。

它是函数运行时,在函数体内部自动生成的一个对象,只能在函数体内部使用。

function test() {
 this.x = 1;
}

上面代码中,函数test运行时,内部会自动有一个this对象可以使用。

那么,this的值是什么呢?

函数的不同使用场合,this有不同的值。总的来说,this就是函数运行时所在的环境对象。

下面分四种情况,详细讨论this的用法。

 

情况一:纯粹的函数调用

 这是函数的最通常用法,属于全局性调用,因此this就代表全局对象。请看下面这段代码,它的运行结果是1。

var x = 1;
function test() {
   console.log(this.x);
}
test();  // 1

 

情况二:作为对象方法的调用

函数还可以作为某个对象的方法调用,这时this就指这个上级对象。

 var obj = {
      x: 1,
      m: function () {
        console.log(this.x);
      }
    }
    obj.m(); // 1

 

情况三 作为构造函数调用

谓构造函数,就是通过这个函数,可以生成一个新对象。这时,this就指这个新对象

function Test() {
 this.x = 1;
}

var obj = new Test();
obj.x // 1

运行结果为1。为了表明这时this不是全局对象,我们对代码做一些改变

var x = 2;
function Test() {
  this.x = 1;
}

var obj = new Test();
x  // 2

 

情况四 apply 调用

apply()是函数的一个方法,作用是改变函数的调用对象。它的第一个参数就表示改变后的调用这个函数的对象。因此,这时this指的就是这第一个参数。

      var x = 0;
      var obj = {
        x: 1,
        m: function () {
          console.log(this.x);
        }
      }
      obj.m.apply(); // 1

apply()的参数为空时,默认调用全局对象。因此,这时的运行结果为0,证明this指的是全局对象。

如果把最后一行代码修改为

obj.m.apply(obj); //1

运行结果就变成了1,证明了这时this代表的是对象obj

 

以上是关于ES6- 箭头函数的使用的主要内容,如果未能解决你的问题,请参考以下文章

ES6 箭头函数

ES6新特性2:箭头函数

ES6新特性2:箭头函数

学习ES6箭头函数

类属性中的 es6 箭头函数

es6 箭头函数和function的区别