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
     
     
     
     
     
     
     
     
  • 相关阅读:
    RSS 2.0 Specification
    [导入]VS2005 SP1 Installation failed
    Python接口自动化测试
    一列保存多个ID(将多个用逗号、特殊符号 隔开的ID转换成用逗号隔开的名称)
    实现div垂直居中的CSS代码
    SQL Server 触发器
    GDT(Global Descriptor Table)全局描述符表
    linux中用vim+ctags+cscope+taglist查看源代码
    Linux中配置bochs
    SQL Server复习 2013.12.16
  • 原文地址:https://www.cnblogs.com/xiyouchen/p/9633503.html
Copyright © 2011-2022 走看看