JS的this真是好难理解啊,求高手指点

百度的前端面试题,代码如下:

var a=5;
function test(){
    a=0;
    alert(a);
    alert(this.a);
    var a;
    alert(a);
}
test();
new test();

在Chrome上run了一下,结果是

0
5
0
0
undefined
0

前三个结果好说,但对于第五个结果undefined我很疑惑,关键的就是这一句:

alert(this.a);

我的理解是,当运行到new test()这一句的时候,this指向了test,那么this.a应该就是

a=0;

这一句里面的0啊!为什么是undefined呢?求解答啊求解答!

--------------------------------分割线--------------------------------------

在调试过程中我发现的几点:

源代码如下

image

运行test()之前,this指向DOMWindow对象:

image

运行test()之时(断点位于test()内部),this仍然指向DOMWindow对象,输出一次为0,5,0。

运行new test()之时(断点位于test()内部),this指向了一个test对象,但是这个对象没用任何属性或成员:

image

输出依次为0,undefined,0

 

有的大哥说在test里面写

function test(){
    a=0;
}

并不代表给test对象加了一个a属性,a只是一个局部变量,是这样么?

那么如何给test加属性呢?(使得第二次输出为0,0,0而不是0,undefined,0呢)

才疏学浅,还望赐教!

--------------------------------分割线2--------------------------------------

有的大哥建议说把

a = 0;

改为

this.a=0;

运行结果是:

undefined
0
undefined
 
undefined
0
undefined

应该说这个结果还是可以理解的。

看来this.a和a确实不一样啊。

转载于:https://www.cnblogs.com/frankfang/archive/2011/05/07/2040113.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值