javascript 局部变量和全局变量的问题

代码如下:<script>window.onload=uc;a="1";functionuc(){a="2";vara="3";dc();}functiondc(){al... 代码如下:
<script>
window.onload=uc;
a="1";
function uc(){
a="2";
var a="3";
dc();
}
function dc(){
alert(a+".4");
}
</script>
弹出来的为什么是1.4 而不是2.4呢?
展开
 我来答
cmoooo
2013-01-04 · TA获得超过3587个赞
知道小有建树答主
回答量:741
采纳率:0%
帮助的人:656万
展开全部
这个怎么说呢,有点复杂

在uc方法中,有一个a="2",如果只有这个的话,没有后面的var a="3",那么这个a,就是全局变量了。

你不妨把var a="3"释掉试试,看是不是这个情况?

可是你在这个方法里,却出现了对a这个变量的var声明,那么在这个方法里,a就是正宗的局部变量,而非外面的全局变量了。

因为在一个作用函数域里,JS是会先寻找function这样的函数定义,先寻找var变量声明,然后再去一步步执行JS赋值、运算等程序步骤的。

比较如下面的程序:

a = 3;

var a;

那么,程序会先把a声明了,然后再去给它赋值3

所以,你的例程看似简单,却包含有两处JS的特性:

1. JS在运行程序前,会寻找变量声明,并决定其作用域;

2. JS的局部变量和全局变量;

-----------

你那么有钱(财富值),怎么不多给点??!
molaifeng
2013-01-04 · TA获得超过5273个赞
知道大有可为答主
回答量:1629
采纳率:50%
帮助的人:1766万
展开全部
  这个有什么复杂的,只能说是对词法分析、作用域不熟悉罢了

  javascript的词法作用域:函数的执行依赖于变量的作用域,这个作用域是在函数定义时决定的,而不是在函数调用时决定的,也叫静态作用域 ,也就是说词法作用域取决于源码,通过静态分析就能确定

  明白了么,也就是说,dc函数执行时a打印值是根据定义时决定的,也就是全局范围内,a的值为1,不信,楼主可以把1改为3,打印的绝对是3.4
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
a510104561
2013-01-04 · TA获得超过617个赞
知道小有建树答主
回答量:273
采纳率:0%
帮助的人:122万
展开全部
我测试了一下应该是这样的
你的全局想要a = 1 a= 2
但是实际效果是 当执行到a= 2 的时候下面有个局部变量a=3把 变量a=2替换了 当执行dc()的时候取得的值a 仅仅是最外层的全局变量a=1 所以怎么也得不到a=2 如果你想 a=2 那么就把局部变量a=3 换值
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式