zoukankan      html  css  js  c++  java
  • ES6 箭头函数

    Arrow Function是ES6 新增的内容
    使用一个箭头定义一个函数
     
    x => x * x 
    

      

    相当于
    function(x) {
        return x * x;
    }
     
    如果包含多条语句则不能省略 { } 和 return语句
     
    如果参数有多个,也需要放在括号 ( ) 里
     
    (x, y) => x * x + y * y
     
    如果是但表达式且需要返回一个对象,也需要括号
    x => ({ foo: x })
     
     
    this
    箭头函数看上去是匿名函数,但两者之间是有一点区别的。
    箭头函数内部的this是词法作用域,由上下文确定。
     
    var obj = {
        birth: 1990,
        getAge: function () {
          var b = this.birth; // 1990
          var fn = function () {
            return new Date().getFullYear() - this.birth; // this指向window或undefined
        };
        return fn();
       }
    };
    现在,箭头函数完全修复了this的指向,this总是指向词法作用域,也就是外层调用者obj:
    var obj = {
      birth: 1990,
      getAge: function () {
        var b = this.birth; // 1990
        var fn = () => new Date().getFullYear() - this.birth; // this指向obj对象
        return fn();
      }
    };
    obj.getAge(); // 25
    如果使用箭头函数,以前的那种hack写法:
    var that = this;
    就不再需要了。
     
    由于this在箭头函数中已经按照词法作用域绑定了,所以,用call()或者apply()调用箭头函数时,无法对this进行绑定,即传入的第一个参数被忽略:
    var obj = {
      birth: 1990,
      getAge: function (year) {
        var b = this.birth; // 1990
        var fn = (y) => y - this.birth; // this.birth仍是1990
        return fn.call({birth:2000}, year);
      }
    };
    obj.getAge(2015); // 25
     
     
     
     
     
     
     
     
  • 相关阅读:
    Stars in Your Window POJ
    Adding New Machine ZOJ
    洛谷 P3400 仓鼠窝
    django启动时报错:Apps aren't loaded yet.
    netstat命令简单使用
    iostat命令简单使用
    linux下查找指定时间内修改过的或新建的文件
    nginx学习之压缩解压篇(七)
    nginx学习之反向代理篇(六)
    nginx学习之静态内容篇(五)
  • 原文地址:https://www.cnblogs.com/xiyouchen/p/9633503.html
Copyright © 2011-2022 走看看