匿名函数下this指向window,及解决办法;箭头函数的this指向问题

匿名函数下this指向window

var name = "小明";
var Data = {
    name: "xiaoming",
    init: function() {
        setTimeout(function() {
            console.log(this.name);  //'小明'
        }, 1000)
    }
}

Data.init();

/*匿名函数中,this指向的是window*/

 

解决匿名函数下this指向window的问题,让他指向当前函数

1.通过that

var name = "小明";
var Data = {
    name: "xiaoming",
    init: function() {
        var that=this; //定义一个that
        setTimeout(function() {
            console.log(that.name); //'xiaoming'
        }, 1000)
    }
}

Data.init();

2.通过bind

var name = "小明";
var Data = {
    name: "xiaoming",
    init: function() {
        setTimeout(function() {
            console.log(this.name);//'xiaoming'
        }.bind(this), 1000) //.bind(this)来处理
    }
}

Data.init();

3.通过es6的箭头函数

var name = "小明";
var Data = {
    name: "xiaoming",
    init: function() {
        setTimeout(()=> {
            console.log(this.name);//'xiaoming'
        }, 1000)
    }
}

Data.init();

 

 为什么箭头函数会改变this的指向???

普通函数:this的指向是在函数执行的时候绑定的,而不是在函数创建时绑定的,谁调用指向谁,this指向的是最后调用它的对象。


箭头函数:this的指向是在函数创建的时候绑定的,而不是在函数执行时绑定的

 

不管在什么情况下,箭头函数的this跟外层function的this一致,外层function的this指向谁,箭头函数的this就指向谁,如果外层不是function则指向window

// this指向最后调用它的对象

var heroName = '黄蓉';
var obj={
    heroName:'huangrong',
    init:function(){
        console.log(this.heroName) //'huangrong'
    }
}
obj.init();




// 箭头函数的this跟外层function的this一致

var heroName = '黄蓉';
var obj={
    heroName:'huangrong',
    init:()=>{
        console.log(this.heroName)//'黄蓉'
    }
}
obj.init();



// 箭头函数的this跟外层function的this一致

var heroName = '黄蓉';
function obj() {
  this.heroName = 'huangrong'
  const foo = () => {
    console.log(this.heroName)//=>huangrong
  }
  foo();
}
obj();

 参考:https://mp.weixin.qq.com/s/N2pWofcWuEz0kmJADUT02g

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值