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

<html><head><scripttype="text/javascript">//全局变量,(1)处vara=1;functionDD(){//调用全局变量,(2)... <html>
<head>
<script type="text/javascript">
//全局变量,(1)处
var a=1;
function DD(){
//调用全局变量,(2)处
alert(a);
//定义局部变量,(3)处
a=2;
alert(a);
}
</script>
</head>
<body>
<input type="text" id="dd" value="">
<input type="button" value="显示" onclick="DD()">
</body>
</html>

问题一: 如果在(1)用var a=document.getElementById("dd").value;为什么(2)就会提示undefined?“全局变量”不能用DOM?

问题二:如果能用DOM,那么在(1)用a=document.getElementById("dd").value;而不加var定义全局的a变量,就会错误提示"a"未定义!不加var不是就默认为全局了吗!难道这就会使a不能自己定义?

问题三:如果在(3)处加上var a=2;把函数内的变量a定义为“局部变量”,可是为什么在(2)处就没值,显示undefined!难道“局部变量”在函数内改变后,该函数就不能调用“全局变量”?

问题四:如果按照我最初的代码写的话,那在(3)处相当于把 全局变量a 给重新赋值为“2”,那就达不到我的目的!我想要在(2)处提示“全局变量a”,然后在函数DD()内部定义一个“局部变量a”并提示!难道不能在局部改变而不影响全局吗?

呵呵,鄙人比较愚钝,希望高手能给予指点!
展开
 我来答
flyingzl
2011-01-01 · TA获得超过218个赞
知道小有建树答主
回答量:268
采纳率:100%
帮助的人:230万
展开全部
很好,你学会了思考。我给你提示:
1、首先你得知道页面是怎么加载执行的。页面从上到下进行执行,如果dom都没有加载完毕,你通过document.getElementById(id)获得的就是undefined。你调用undefined.value当然会报错
如果你把js代码放在html代码的下面就没事了。

2、全局变量,
首先,慎用全局变量,因为很有可能你不小心改变了他。一个全局变量,你在任何地方都可以改它。记住,即使再函数内部,你定义了一个不加var的变量,它也会变为全局变量

3、局部变量

所谓局部变量,就是它的生命周期只在一个局部环境中才有效。比如你在一个函数内部定义一个变量 var a;a只在这个函数中才有效。当然,如果函数返回一个闭包,就是另外的问题了,因为闭包即使在函数执行完毕后,依然可以访问函数的局部变量

看下面的例子

var a=3;

say();

hello();

function say(){
alert(a); //alert(3);
}

function hello(){
alert(a); //alert(undefined)
var a=3;
alert(a); //alert(3);
}

在say函数中,由于找不到a变量,它就会去它的上层环境去找,结果找到了a
在hello函数中,函数会优先处理定义的变量,在hello中已经定义了a,但是函数预处理时会将a定义为undefine,实际执行时才会去修改它的值。所以再hello中返回的是undefined。
a65816079
2011-01-03 · TA获得超过1134个赞
知道小有建树答主
回答量:111
采纳率:0%
帮助的人:64.8万
展开全部
第一 你这个script的位置在<input type="text" id="dd" value="">程序装载就直接运行了
var a=document.getElementById("dd").value;;
找不到id="dd".如果将script的位置放在<input ……>的下面就能获得值了。
如果要定义a为全局变量,原来的地方不变在//调用全局变量,(2)处加入
a=document.getElementById("dd").value
就可以了。
以下是修改后的代码:
<html>
<head>
<script type="text/javascript">
var a=1;
alert(a);
function DD(){
a=document.getElementById("dd").value;
alert(a);
a=2;
alert(a);
}
</script>
</head>
<body>
<input type="text" id="dd" value="">
<input type="button" value="显示" onclick="DD()">
</body>
</html>

总之你这里出现的问题是程序运行的先后顺序问题而不是全局等定义域的问题。

代码的运行顺序为
var a=1;
alert(a);
点击<input type="button" value="显示" onclick="DD()">后
运行DD()内的代码
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
藩彩妍乔莎
2019-12-25 · TA获得超过3万个赞
知道大有可为答主
回答量:1.1万
采纳率:27%
帮助的人:572万
展开全部
alter("\n局部变量:\n\nototal="+total+"\n");
其中“\n局部变量:\n\nototal=”是一段字符串,里面的\n会转换为回车换行,后面接着的="+total+"\n",total是之前定义的一个变量,\n表示换行。
onload是页面加载时触发的事件,则表示页面加载完成后,会自动执行add这个函数。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式