回调函数中this的指向(知识的搬运工)

1.what is 回调函数

我自己的理解是,将一个函数作为一个参数传递到另外一个函数中,当我们需要使用的这个函数的时候,再去调用它。

2.回调函数中this的指向

this指向的三种情况

  1. obj.fun() fun中的this->obj, 自动指向.前的对象
  2. new Fun() Fun中的this指向实例对象
  3. fun()和匿名函数自调 this默认->window,函数内部的this,this默认是指向window的

3.在实际的例子看this指向


看结果:
undefined认识Jack
undefined认识Rose
undefined认识Tom
undefined认识Jerry

回调函数中的this默认指向window的,因为本质上是在函数内callback,并没有.前的对象调用

使用箭头函数解决问题

如何解决:


结果是:

鲍勃认识Jack
鲍勃认识Rose
鲍勃认识Tom
鲍勃认识Jerry

res: 箭头函数本身没有自己的this,他会顺着作用域链向上找 找到Bob.intr() 所以this指向Bob

使用bind修改this的指向

bind()的作用类似call和apply,都是修改this指向。但是call和apply是修改this指向后函数会立即执行,而bind则是返回一个新的函数,它会创建一个与原来函数主体相同的新函数,新函数中的this指向传入的对象。

bind函数

var Bob={
        sname:"鲍勃",
        friends:["Jack","Rose","Tom","Jerry"],
        intr(){
          this.friends.forEach(function(friend){
               console.log(this.sname+"认识"+friend);
          }.bind(this));
        }
    }
    Bob.intr();

在外部函数中将this存为一个变量,回调函数中使用该变量,而不是直接使用this

var name = 'my name is window';
var obj = {
    name: 'my name is obj',
    fn: function () {
        var that = this;
        var timer = null;
        clearInterval(timer);
        timer = setInterval(function () {
            console.log(that.name);   //my name is obj
        }, 1000)
    }
}

4.有关回调函数的一些疑问

回调函数中this的指向(知识的搬运工)_第1张图片
回调函数中this的指向(知识的搬运工)_第2张图片

5.参考资料总结

回答一些回调函数中this指向的疑问

改变回调函数中this的指向

回调函数?

你可能感兴趣的:(#,js,前端,javascript,开发语言)