React Native 箭头函数this

ES6 this :this的最终指向的是那个调用它的对象

重要:this的指向在函数创建的时候是决定不了的,在调用的时候才能决定,谁调用的就指向谁,一定要搞清楚这个。

箭头函数看上去是匿名函数的一种简写,但实际上,箭头函数和匿名函数有个明显的区别:箭头函数内部的this是词法作用域,由上下文确定
this
var Person = {
  age = 0;
  function growUp() {
    return this.age++;  // this指向Person对象
  };
}
//调用
var man = new Person();
man.growUp();   //通过Person对象来调用growUp(), 所以this指向的是Person对象
this的默认的指向是window
function Person() {
  age = 0;
  function growUp() {
    return this.age++;  // this指向window/undefined/grobal
  };
}
//上面的这种情况并不能找到age这个变量,所以会报undefined错误
可以通过新增一个变量来指向期望的 this 对象,然后将该变量放到闭包(函数A内部声明了个函数B,函数B引用了函数B之外的变量,并且函数A的返回值为函数B的引用。那么函数B就是闭包函数)中来解决。
function Person() {
  var that = this;
  that.age = 0; //that 指向的就是对象自己
  function growUp() {
    that.age++; //that指向的是Person对象
  };
}
箭头函数完全修复了this的指向,this总是指向词法作用域(自动寻找作用域), 箭头函数与正常函数最大的区别是使得this从正常情况下的动态作用域(调用时的上下文)变成了静态作用域(根据定义位置确定值,也就是词法作用域).
function Person() {
  age = 0;
  growUp = ()=> this.age++ ; // this指向Person对象
}
// 箭头函数中的`this`寻找到当前对象的`age`变量,所以显示结果正常

var growUp = ()=>{
  console.log(this)
}
//等同于
var growUp = function(){
    console.log(this)
}.bind(this);

箭头函数在定义时就已经确定了this的作用域

情况1:如果一个函数中有this,但是它没有被上一级的对象所调用,那么this指向的就是window,这里需要说明的是在js的严格版中this指向的不是window,但是我们这里不探讨严格版的问题,你想了解可以自行上网查找。
情况2:如果一个函数中有this,这个函数有被上一级的对象所调用,那么this指向的就是上一级的对象。
情况3:如果一个函数中有this,这个函数中包含多个对象,尽管这个函数是被最外层的对象所调用,this指向的也只是它上一级的对象

this问题详解

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 本文是大神廖雪峰的JavaScript教程学习笔记。并不是教程,如有需要,请前往廖雪峰大神大博客. 一、函数定义和...
    0o冻僵的企鹅o0阅读 3,483评论 1 3
  • 函数函数定义与调用变量作用域全局变量方法高阶函数闭包箭头函数$generator$ 函数 函数定义与调用 定义函数...
    染微言阅读 3,795评论 0 5
  • 函数参数的默认值 基本用法 在ES6之前,不能直接为函数的参数指定默认值,只能采用变通的方法。 上面代码检查函数l...
    呼呼哥阅读 8,979评论 0 1
  • 1. this之谜 在JavaScript中,this是当前执行函数的上下文。因为JavaScript有4种不同的...
    百里少龙阅读 4,661评论 0 3
  • 我终于看破樊篱 在黑夜,在白昼 在你来的时候 我终于听懂内心期待的敲击 在白昼,在黑夜 在你来的时候 命运曾把我摁...
    苏格拉风掠影阅读 3,785评论 45 64

友情链接更多精彩内容