今天看到的xx的一道百度前端笔试题

本文探讨了JavaScript中this关键字的行为以及变量作用域的问题。通过具体的代码示例,解释了在不同上下文中this指向的对象差异,并澄清了局部变量与对象属性之间的误解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以下是原文:

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呢?求解答啊求解答!

------------------------------------------------------------------------------------------------------------------------------------------

其实this还好理解,new test()时,里边的this指向的就是 new test()这个对象,

这样看吧var t=new test();那么test里边的this就指向t了,当alert(this.a)时,因为t本身没有a这个属性当然就是undefined啦,而博主把函数里边的局部变量理解成了它的属性,所以就想不通啦。局部变量和属性成员还是有本质区别的。

其实这里我想说的是test里边的一句var a  使得这段代码的运行结果大相径庭,在test函数里边先使用了a这个变量,然后再定义它的,var a让a变成了函数里边的一个局部变量,原来在函数里边的变量还可以先使用再定义!!!不过这种方式的用法还是不推荐吧,直接var a=0;干嘛弄得这么别扭呢

转载于:https://www.cnblogs.com/hust/archive/2011/05/10/2041877.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值