论坛首页 Web前端技术论坛

Js 的undefined

浏览 11572 次
锁定老帖子 主题:Js 的undefined
精华帖 (0) :: 良好帖 (4) :: 新手帖 (1) :: 隐藏帖 (22)
作者 正文
   发表时间:2009-07-01  
<html>
<head>
<script type="text/javascript">
var a=100;
var b=true;
function test(){
	alert(a);
	alert(b);
	b=false;
	alert(b);
	var a=200;
	alert(a/2);
	alert(++Math.PI);
	alert(Math.PI++);
}
</script>
</head>

<body onload="test()">
</body>
<html>
 


大家猜猜上面的执行结果是什么,然后再COPY一个HTML,执行以下,然后再想想为什么。。。
   发表时间:2009-07-02  
为什么啊?想不通?还请楼主赐教!
0 请登录后投票
   发表时间:2009-07-02  
js 作用域的问题,当全局变量和局部变量同名时,局部覆盖全局,而局部此时未赋值,所以是undefined
0 请登录后投票
   发表时间:2009-07-03  
定义一个function的时候会把内部声明的变量置顶

即可以看成
function test(){ 
     var a;
     alert(a);
     。。。
     。。。
     。。。
     a=200; 
2 请登录后投票
   发表时间:2009-07-03  
但是b不也是这种情况吗,为什么它就不是undefined?
0 请登录后投票
   发表时间:2009-07-03  
06softwaregaojie 写道
但是b不也是这种情况吗,为什么它就不是undefined?

b的作用域不同,它是全局变量。
0 请登录后投票
   发表时间:2009-07-06  
这个是因为javascript的加载顺序有关,从小的作用域往外找。
LZ在test方法里面又声明了局部变量a,所以在test方法执行的时候就在test方法的作用域里面找变量a,但是a只是声明并没有赋值,所以alert(a)的时候就是undefined.
至于为什么变量b是true,是因为在test执行的时候,没有找到this.b,所以就在外部找,正好有一个全局变量b=true,所以alert(b)就是true,后面的内容就没啥好说的。
1 请登录后投票
   发表时间:2009-07-14  
不是很明白,alert(b)时怎么会找外部的b,而alert(a)时不在外面找呢,??
0 请登录后投票
   发表时间:2009-07-14  
lgpcl110 写道
不是很明白,alert(b)时怎么会找外部的b,而alert(a)时不在外面找呢,??

在test()方法内申明了var a=200;这个时候alert(a),就调用方法内申明的这个a。而方法内没申明b,只是给b重新赋值,所以alert(b)就之内找外面申明的那个b。
0 请登录后投票
   发表时间:2009-07-14  
报未定义是在a 那儿的问题吗?
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics