运行程序,解读this指向---case2

片段1

var anum = 666;
function funcTest1(){
    var b = anum * 2;
    var anum = 6;
    var c = anum / 2;
    console.log(b);//NAN,因为anum指向undefined
    console.log(c);//3
}
funcTest1();

片段2

//没进funcTest2
window.num = 11;
var myObj = {
    num:13,
    funcTest2:function(){
        this.num *= 23;
        return function(){
            this.num *= 19;
        }
    }
};
console.log(window.num + myObj.num);//11 + 13 = 24

 

window.num = 11;
var myObj = {
    num:13,
    funcTest2:function(){
        this.num *= 23;
        return function(){
            this.num *= 19;
        }
    }
};
myObj.funcTest2();//进funcTest2,this指向myObj,但没进return。
console.log(window.num + myObj.num);//11 + 13*23 = 310

 

window.num = 11;
var myObj = {
    num:13,
    funcTest2:function(){
        this.num *= 23;
        return function(){
            this.num *= 19;
        }
    }
};
myObj.funcTest2()();//先进funcTest2,this指向myObj,后进return,this指向window。
console.log(window.num + myObj.num);//11*19 + 13*23 = 508

 

window.num = 11;
var myObj = {
    num:13,
    funcTest2:function(){
        this.num *= 23;
        return function(){
            this.num *= 19;
        }
    }
};
myObj.funcTest2();//进funcTest2,this指向myObj,但没进return。
console.log(window.num + myObj.num);//11 + 13*23 = 310
myObj.funcTest2()();//先进funcTest2,this指向myObj,后进return,this指向window。
console.log(window.num + myObj.num);//11*19 + 13*23*23 = 7086

 

window.num = 11;
var myObj = {
    num:13,
    funcTest2:function(){
        this.num *= 23;
        return function(){
            this.num *= 19;
        }
    }
};
var tcal = myObj.funcTest2();//进funcTest2,this指向myObj,但没进return。
console.log(window.num + myObj.num);//11 + 13*23 = 310
tcal();//没进funcTest2,直接进return,this指向window。
console.log(window.num + myObj.num);//11*19 + 13*23 = 508

 

window.num = 11;
var myObj = {
    num:13,
    funcTest2:function(){
        this.num *= 23;
        return function(){
            this.num *= 19;
        }
    }
};
var cal = myObj.funcTest2;
var tcal = cal();//进funcTest2,this指向window,但没进return。
console.log(window.num + myObj.num);//11*23 + 13 = 266
tcal();//没进funcTest2,直接进return,this指向window。
console.log(window.num + myObj.num);//11*23*19 + 13 = 4820

 

window.num = 11;
var myObj = {
    num:13,
    funcTest2:function(){
        this.num *= 23;
        return function(){
            this.num *= 19;
        }
    }
};
var cal = myObj.funcTest2;
var tcal = cal();
myObj.funcTest2();//进两次funcTest2,this第1次指向window,第2次指向myObj,但没进return。
console.log(window.num + myObj.num);//11*23 + 13*23 = 552
tcal();//没进funcTest2,直接进return,this指向window。
console.log(window.num + myObj.num);//11*23*19 + 13*23 = 5106

转载于:https://www.cnblogs.com/camille666/p/this_case2.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值