美文网首页
this指向例子

this指向例子

作者: LoveBugs_King | 来源:发表于2019-04-04 21:23 被阅读0次

关于普通函数中this对象记住两点
1、this对象是函数在运行时基于函数的执行环境绑定的。
2、我们直到函数在被调用时,都会自动取得两个特殊变量thisarguments函数内在搜索这两个变量时只会搜索到自己的活动对象,不会像其它普通变量一样通过作用域向上去搜索。

关于箭头函数中this对象:
1、箭头函数this对象是在函数定义时绑定的,会指向最靠近该箭头函数的函数的环境(对象不算)。
2、箭头函数调用时,没有arguments和this特殊变量,对箭头函数而言,他们就是普通变量,会沿着作用域去查找,找到最近一层函数作用域(比如{}对象的this不算哦)中的this或者arguments。而最近一层函数应该是个普通函数,它的this对象指向,就按上面普通函数的方法去找。
3、箭头函数除了语法更精简,主要优点是解决了setTimeout、setInterval内函数的this指向问题(原本指向全局),现在可以就近指向。

下面先来看看普通函数的this指向:

例子1

b()其实就是window.b(),执行环境是window对象,所以this对象绑定的是window对象,也就返回了全局对象‘111’。

例子2

首先obj.getA()函数的执行环境是obj,所以getA函数的this对象也就指向obj。
obj.getA()返回的匿名函数,该函数的执行环境是全局环境,所以this指向全局对象,也就返回"111"。
你可能会误以为匿名函数的this对象会根据作用域往上查找,其实并不会。

例子3

h函数是自己执行的,相当于执行环境是全局环境。

例子4

obj.getA()的执行环境是obj,函数内的this也就指向obj。
把obj.get函数取出来后,在外部执行,执行环境就是全局环境,函数内的this也就指向全局变量。

例子5

o.b.fn(),函数fn的执行环境是b对象,但b对象中并无a变量,所以返回undefined。
当this碰到return时:如果返回值是一个对象(不包括null),那么this指向的就是那个返回的对象,如果返回值不是一个对象那么this还是指向函数的实例

当碰到return时

下面来看看箭头函数:
setTimeout和setInterval中this指向的问题

        setTimeout和setInterval中写入的函数func相当于闭包,函数func被return出来了。所以函数func中的this会指向全局。如果想要this指向正确的值,有3种方法。

1、将当前对象的this存为一个变量,定时器内函数引用的变量都会因为闭包的作用而长久持有、不被垃圾收集器回收。

变量指定

2、箭头函数,箭头函数内的this指向 当前父级上下文环境。其实就是前一种的方法,给我们做了简化。

箭头函数

3、bind()方法,Function.prototype上的一个方法,当被绑定函数执行时,bind方法会创建一个新函数,并将第一个参数作为新函数运行时的this。

bind方法,当然使用call或apply方法来代替bind方法,得到的结果也是正确的,但是call方法会在调用之后立即执行,那样也就没有了延时的效果,定时器也就没有用了

相关文章

  • this指向例子

    关于普通函数中this对象记住两点:1、this对象是函数在运行时基于函数的执行环境绑定的。2、我们直到函数在被调...

  • es6 箭头函数的this指向

    箭头函数在创建时确定了this指向。 下方例子中,箭头函数创建时this指向window,调用时也就指向了window

  • 浅谈js中this的指向问题

    this最终指向的是调用它的那个对象 1、在普通函数里的this指向 例子1: 运行结果: 这里的this最终指向...

  • this 指向(启发性的例子)

    箭头函数里面的this是静态计算的,也就是无论后面谁调用 getName、有没有对象调用 getName, 箭头函...

  • Function.prototype.apply()

    语法 apply()主要用途是改变this的指向 举个例子 其实上面的代码就相当于(改变函数中的this指向,指向...

  • setTimeout函数this指针指向全局的问题

    setTimeout的this会指向全局变量: 从上述例子中可以看到setTimeout中函数内的this是指向了...

  • 深入理解bind/call/apply以及手写

    bind/call/apply都是用来重新定义(改变)函数内部的this指向。 例子: 菜鸟的例子更加清晰[htt...

  • this指向

    this指向: 简单的一句话,谁调用的函数,this就指向谁 例子: var obj = { fun1: func...

  • javascript基础:修改this指针

    题目 封装函数 f,使 f 的 this 指向指定的对象 。 输入例子 输出例子 分析 题目拆解 该题目的要求是:...

  • Java向上转型、向下转型

    向上转型:父类指向子类对象Person p = new SuperMan(); 例子:Person person ...

网友评论

      本文标题:this指向例子

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