ES6入门教程笔记(7)-箭头函数

£神魔★判官ぃ 2022-03-18 07:18 341阅读 0赞

基本用法

ES6允许使用“箭头”(=>)定义函数。

  1. // 箭头函数
  2. let f = () => 5;
  3. // ES5
  4. let f = function() {
  5. return 5;
  6. };

箭头函数用圆括号代表参数部分,如果代码部分多于一条语句,就用大括号括起来。

  1. // 箭头函数
  2. let sum = (n1, n2) => { return n1 + n2; }
  3. // ES5
  4. let sum = function(n1, n2) {
  5. return n1 + n2;
  6. };

箭头函数使得表达更加简洁,另外一个用处是简化了回调函数。

  1. // 箭头函数写法
  2. let result = values.sort((a, b) => a - b);
  3. // 正常函数写法
  4. let result = values.sort(function(a, b) {
  5. return a - b;
  6. });

使用注意

箭头函数有几个使用注意点。

  • 函数体内的this,指定义时所在的对象,而不是使用时所在的对象。
  • 不可以当作构造函数,即不可以使用new命令,否则会报错。

    function foo() {

    1. setTimeout(() => {
    2. console.log('id: ', this.id);
    3. }, 100);

    }

    var id = 22;

    foo.call({ id: 44});
    // id: 44

上面代码中,箭头函数让this总是指向函数定义所在的对象,所以输出的是44

箭头函数让this指向固定化,并不是因为内部绑定了this,实际原因是箭头函数根本没有自己的this,导致内部的this就是外层代码块的this。也正因为它没有this,所以不能用作构造函数。

所以,箭头函数转成ES5的代码如下。

  1. // ES5
  2. function foo() {
  3. var _this = this;
  4. setTimeout(() => {
  5. console.log('id: ', _this.id);
  6. }, 100);
  7. }
  8. // id: 44

上面代码清楚地说明了,箭头函数没有自己的this,而是引用了外层的this

不适用场合

箭头函数简化了回调函数,使得表达更加简洁。同时它使得this从“动态”变成“静态”,所以下面几个场合不适合使用箭头函数。

1 函数定义,且函数内部包括this

  1. const cat = {
  2. lives: 9,
  3. jumps: () => {
  4. this.lives--;
  5. }
  6. }

上面的箭头函数中,this指向全局对象,因此不会得到预期结果。

2 需要动态this的时候,不应使用箭头函数。

  1. var button = document.getElementById('press');
  2. button.addEventListener('click', () => {
  3. this.classList.toggle('on');
  4. });

上面代码运行会报错,因为this指向全局对象。如果改成普通对象,this就会动态指向正确对象。

3 另外,如果函数体很复杂也不应使用箭头函数,而是使用普通函数,可以提高代码可读性。

注:本文原始内容来自 ES6标准入门,有修改。

发表评论

表情:
评论列表 (有 0 条评论,341人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Es6箭头函数

    `箭头函数`是Es6新增加的一个语法特性,在简化编码方面,有着巨大亮点。 下文就是我对于箭头`(=>)`函数的定义与实用说明。 用法一(无参数) 定义语法

    相关 ES6 箭头函数

    ES6 中添加了函数新的定义语法——`箭头函数`,当有大于一个形参的时候,必须使用`()`代表部分参数,函数体大于一行时,必须使用`{}`将函数体括起来,并使用 `return

    相关 es6箭头函数

    一。对箭头函数的理解 1. 在ES6中,"=>"是函数的表达式,并且箭头函数是匿名的。(这个箭头叫“lambda运算符”) 如: var lets = b => b\b

    相关 ES6箭头函数

    ES6箭头函数 一、什么是箭头函数 二、写法 三、箭头函数中this 一、什么是箭头函数 简化了匿名函数的写法, 二、写法 fu