箭头函数

ES6里添加一个特殊的语法形式用于函数声明,叫做箭头函数。格式如下:

var foo=a=>{
    console.log(a);
}
foo(3);//3

为什么要用箭头函数来声明一个函数?当然是为了少让你敲几个单词啦。(✪ω✪) 开玩笑的。

var obj={
    id:'Alice',
    cool:function coolFn(){
        console.log(this.id);
    }
}

var id='whatever!';
obj.cool();//Alice
setTimeout(obj.cool, 100);//whatever!为啥我这里显示的是undifined?

可以看到,cool()函数弄丢了this的绑定。解决的方法就是定义一个常量等于this。代码如下:

var obj={
    count:0,
    cool:function coolFn(){
        var me=this;
        if(me.count<1){
            setTimeout(function timer(){
                me.count++;
                console.log('Alice');
            }, 100);
        }
    }
};
obj.cool();//Alice

而在箭头函数中,引入了一个叫做this词法的行为:

var obj={
    count:0,
    cool:function coolFn(){
        if(this.count<1){
            setTimeout(()=>{
                this.count++;
                console.log("Awesome!")
            },100);
        }
    }
};
obj.cool();//Awesome!

箭头函数在涉及this绑定时的行为和普通的函数行为完全不一致。它放弃了所有普通this绑定的规则,而是用当前的词法作用域覆盖了this本来的值

因此,箭头函数并非与this进行了解绑,而是“继承”了cool()函数的this绑定。因此,调用它就不会出错。

还有更可取的方法,是正确使用和包含this机制。

var obj={
    count:0,
    cool:function coolFn(){
        if(this.count<1){
            setTimeout(function timer(){
                this.count++;
                console.log('whatever');
            }.bind(this),100);
        }
    }
}
obj.cool();//whatever
原文地址:https://www.cnblogs.com/qingshanyici/p/10505997.html