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
     
     
     
     
     
     
     
     
  • 相关阅读:
    capwap学习笔记——初识capwap(一)(转)
    capwap学习笔记——capwap的前世今生(转)
    实现一个简单的C++协程库
    c++ 异常处理(1)
    一个浮点数计算的问题
    c++11 中的 move 与 forward
    c++中的左值与右值
    说说尾递归
    boost bind及function的简单实现
    [译] 玩转ptrace (一)
  • 原文地址:https://www.cnblogs.com/xiyouchen/p/9633503.html
Copyright © 2011-2022 走看看