this指向问题的简单理解

// 首先强调一点,this的指向在函数创建的时候是决定不了的,
// 在调用的时候才能决定,谁调用的就指向谁,一定要搞清楚这个
var name = "222";
var a = {
name: "111",
say: function () {
console .log( this.name);                                         // 22
}
}
a .say(); //111
var fun = a. say;
//就相当于将函数(function(){console.log(this.name);})赋给fun,而this在不调用时,什么都不是
fun(); //222
// 此时fun再调用,就相当于仅仅是调用一个正常的函数var fun = function(){console.log(this.name)}而已
//而函数本身没有name属性,就去window里面找
window. a .say(); //111
// 这种和调用a.say();一样
// 所以证明,this指向调用他的父级
var b = {
name: "333",
say: function ( fun) {
fun();
}
}
b .say( a. say); //参数传的a.say,就相当于把a.say --->function(){console.log(this.name);}作为一个参数直接传入,
// function (fun){ (function(){console.log(this.name);})(); // }而fun();本来就是函数执行,和外部谁包括他没有关系
//而函数里面的一个立即执行函数,内部并没有name,就直接去上级b.say函数找,
//上级还没有,就找到window中的name

b. say = a. say; //相当于将b.say 变成a.say --->function(){console.log(this.name);}
b .say(); //333
//虽然内部函数被改变了,但是调用时依然是b来调用的,而this在没有调用之前谁都不指,所以b调用他,依然指向b

         111                                                                     this.html:22            
         222                                                                    this.html:22             
         111                                                                     this.html:22             
        222                                                                     this.html:22             
         333                                                                     this.html:22      
    上面是在控制台显示的情况,我们可以清晰的看到,虽然函数不断的被调用,但一直都是调用的22行的内容,而this的指向正如上所述。
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值