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呢? 展开
<script>
window.onload=uc;
a="1";
function uc(){
a="2";
var a="3";
dc();
}
function dc(){
alert(a+".4");
}
</script>
弹出来的为什么是1.4 而不是2.4呢? 展开
3个回答
展开全部
这个怎么说呢,有点复杂
在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的局部变量和全局变量;
-----------
你那么有钱(财富值),怎么不多给点??!
在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的局部变量和全局变量;
-----------
你那么有钱(财富值),怎么不多给点??!
展开全部
这个有什么复杂的,只能说是对词法分析、作用域不熟悉罢了
javascript的词法作用域:函数的执行依赖于变量的作用域,这个作用域是在函数定义时决定的,而不是在函数调用时决定的,也叫静态作用域 ,也就是说词法作用域取决于源码,通过静态分析就能确定
明白了么,也就是说,dc函数执行时a打印值是根据定义时决定的,也就是全局范围内,a的值为1,不信,楼主可以把1改为3,打印的绝对是3.4
javascript的词法作用域:函数的执行依赖于变量的作用域,这个作用域是在函数定义时决定的,而不是在函数调用时决定的,也叫静态作用域 ,也就是说词法作用域取决于源码,通过静态分析就能确定
明白了么,也就是说,dc函数执行时a打印值是根据定义时决定的,也就是全局范围内,a的值为1,不信,楼主可以把1改为3,打印的绝对是3.4
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我测试了一下应该是这样的
你的全局想要a = 1 a= 2
但是实际效果是 当执行到a= 2 的时候下面有个局部变量a=3把 变量a=2替换了 当执行dc()的时候取得的值a 仅仅是最外层的全局变量a=1 所以怎么也得不到a=2 如果你想 a=2 那么就把局部变量a=3 换值
你的全局想要a = 1 a= 2
但是实际效果是 当执行到a= 2 的时候下面有个局部变量a=3把 变量a=2替换了 当执行dc()的时候取得的值a 仅仅是最外层的全局变量a=1 所以怎么也得不到a=2 如果你想 a=2 那么就把局部变量a=3 换值
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询