美文网首页
ES6箭头函数的this值

ES6箭头函数的this值

作者: 果然 | 来源:发表于2019-07-12 13:30 被阅读0次
ES6箭头函数的this值

先来看一个例子,最近喜欢听Camila Cabello的Havana,就以她举例子吧

const havana = {
    singer: 'Camila Cabello',
    hobbies:['Sleeping','Songing','Reading'],
    printHobbies: function(){
        console.log(this);//"Camila Cabello",这里的this值是我们想要的.
        this.hobbies.map(function(hobby){
            console.log(this);//这里this的值是“window”,因为js中的this值是在运行的时候才绑定的,
            console.log(`${this.singer} loves ${hobby}`);
        })
    }
}   
havana.printHobbies();

这时候控制台的输出结果是:
loves Sleeping
loves Songing
loves Reading
singer不见了!
通过添加console.log(this);我们发现,在map里面的回调函数里的this指向了window,
这是因为:
1、js中的this值是在运行的时候才绑定的。
2、map里面的函数是map方法的回调函数,是一个独立的函数,它不作为对象的方法调用,如果不通过 call()、apply()、bind() 去改变 this 的指向的话,this就指向window,global,或undefined(严格模式).
我们通过在map上一行添加console.log(this);会发现这时候的this是我们希望得到的"Camila Cabello"。

我们把上面的例子改一下,

const havana = {
    singer: 'Camila Cabello',
    hobbies:['Sleeping','Songing','Reading'],
    printHobbies: function(){
        var that = this;//声明一个变量,给它赋值this
        this.hobbies.map(function(hobby){
            console.log(`${that.singer} loves ${hobby}`);
        })
    }
}   
        havana.printHobbies();

这里正确输出了:
Camila Cabello loves Sleeping
Camila Cabello loves Songing
Camila Cabello loves Reading

上面的例子,使用了传统的方法,在printHobbies的函数内部,添加了var that = this;然后使用that.singer调用singer,
现在我们使用es6箭头函数的写法看看:

const havana = {
    singer: 'Camila Cabello',
    hobbies:['Sleeping','Songing','Reading'],
    printHobbies: function(){
        this.hobbies.map(hobby=>{//改成箭头函数
            console.log(`${this.singer} loves ${hobby}`);
        })
    }
}   
havana.printHobbies();

这里也能正确输出了:
Camila Cabello loves Sleeping
Camila Cabello loves Songing
Camila Cabello loves Reading

那么,为什么箭头函数会达到这种效果呢?

箭头函数没有自己的this值,它的this值继承了它的父作用域。
箭头函数的this值是词法作用域,是在定义的时候,就被指定了的,以后也不会随着它调用方法的改变而改变。

相关文章

  • ES6-箭头函数

    箭头函数中的this ES6函数参数默认值 箭头函数不适用的场景

  • 箭头函数

    1,箭头函数定义 2,Es6 中箭头函数参数与返回值简写 补充 3,箭头函数中 this 指向 注:箭头函数中的t...

  • ES6箭头函数简介

    @(JS技巧)[ES6|箭头函数] ES6箭头函数(Arrow Functions) ES6可以使用“箭头”(=>...

  • es6全家桶(二)—— 箭头函数

    es6全家桶(二)—— rest参数、箭头函数 箭头函数 ES6 允许使用“箭头”(=>)定义函数。 var f ...

  • es6、js、css、jquery、vue以及程序设计 知识点总

    es6 列举常用的es6特性。 箭头函数this的指向。 eg:箭头函数的特性 箭头函数内部没有construc...

  • ES6函数

    函数 ES6 允许为函数的参数设置默认值 箭头函数 在箭头函数中,this的指向是固定的,是定义时所在的对象,不是...

  • es6基础知识3(函数拓展)

    title: es6基础知识3(函数拓展)tags: 参数默认值 剩余参数 箭头函数 categories: 前端...

  • 学习 ES 6 箭头函数

    箭头函数的用法 ES6 允许使用“箭头”(=>)定义函数。 箭头函数的一个用处是简化回调函数。 箭头函数 this...

  • ES6语法

    箭头函数 ES6中新增的定义函数的方式。 在箭头函数中,如果函数体中只有一句代码,且代码的执行结果就是返回值,可以...

  • 箭头函数

    ES6允许使用“箭头”(==>)定义函数。 箭头函数 等同于

网友评论

      本文标题:ES6箭头函数的this值

      本文链接:https://www.haomeiwen.com/subject/bulekctx.html