zoukankan      html  css  js  c++  java
  • es6箭头函数讲解

    es6箭头函数的用法

    箭头函数是es6的一种函数的简写方法。

    如下:

    var f = v = > v;
    //等同于
    var f = function(v){
          return v;
    }
    var sum = (num1,num2) => num1+num2 ;
    //等同于
    var sum = function(num1,num2){
          return num1+num2
    }
    [1,2,3].map(function (x) {
          return x * x;
    });
    // 箭头函数写法 [1,2,3].map(x => x * x);//简洁了许多

    从例子我们可以看出,省略了function,花括号‘{}’用‘=>’代替了。这种写法更简洁了。

    除了简洁之外,箭头函数还有另外一个优点,就是函数体内的this的指向始终是指向定义它所在的对象,而不会指向调用它的对象,我们知道es5中的函数是谁执行它,它就指向谁。

    es5  eg:

    var countdown ={
             'count':10,
              'str':'hello!!!',
              showstr(){
                 var _this = this;
                 var dom = document.getElementById('dom');
                 dom.innerHTML= _this.todouble(this.count);
                  setInterval(function(){
                        var dom=document.getElementById('dom');
                        dom.innerHTML=_this.todouble(_this.count);
                        _this.count --;
                        if(_this.count <0){
                            dom.innerHTML=_this.str;
                        }
                  },1000) 
             },
             todouble(t){
                    var t = parseInt(t);
                    if(t<10){
                        return '0'+t;
                    }else{
                        return t;
                    }
            }
        }
        countdown.showstr();

    如上是一个倒计时完之后显示一个hello文本的效果,在setInterval里面,如果我们直接写this的话,这个this是指向window的。因此我们需要在setInterval函数之前先保存_this = this;

    当我们使用es6的箭头函数的时候,就可以直接使用this了

    es6  eg:

         //es6的写法。
         var countdown ={
             'count':10,
              'str':'hello!!!',
              showstr(){
                  var dom = document.getElementById('dom');
                  dom.innerHTML= this.todouble(this.count);
                  setInterval(() => {
                        dom.innerHTML= this.todouble(this.count);;
                        this.count --;
                        if(this.count <0){
                            dom.innerHTML=this.str;
                            return false;
                        }
                  },1000) 
               },
               todouble(t){
                    var t = parseInt(t);
                    if(t<10){
                        return '0'+t;
                    }else{
                        return t;
                    }
               }
        }
        countdown.showstr();

    上面同样的代码改成箭头函数之后我们在setInterval里面就可以直接使用this了。

    箭头函数里面的this装换成es5后的代码如下:

    // ES6
    function fn() {
      setTimeout(() => {
        console.log('id:', this.id);
      }, 100);
    }
    // ES5
    function fn() {
      var _this = this;
      setTimeout(function () {
        console.log('id:', _this.id);
      }, 100);
    }

    上面代码中,转换后的ES5版本说明了,箭头函数里面根本没有自己的this,而是引用外层的this,由于箭头函数没有自己的this,所以也就不能用call()apply()bind()这些方法去改变this的指向。

    箭头函数使用的注意的地方:

    (1)函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象。

    (2)不可以当作构造函数,也就是说,不可以使用new命令,否则会抛出一个错误。因为箭头函数的this是由定义它的对象决定的,对象的构造函数是顶层的,它的外层,没有this可以传进去给箭头函数使用。

    (3)不可以使用arguments对象,该对象在函数体内不存在。如果要用,可以用Rest参数代替。

    (4)不可以使用yield命令,因此箭头函数不能用作Generator函数。

     

  • 相关阅读:
    AES加解密
    redis HyperLogLog使用
    vi常用操作
    redis string使用
    用jdk命令定位java应用问题
    用户态、内核态及零拷贝
    缓存穿透与雪崩
    ReentrantLock、Semaphore、AQS
    redis list使用
    不同数据库取并集、交集、差集
  • 原文地址:https://www.cnblogs.com/xinggood/p/6534952.html
Copyright © 2011-2022 走看看