锁定老帖子 主题: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,执行以下,然后再想想为什么。。。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-07-02
为什么啊?想不通?还请楼主赐教!
|
|
返回顶楼 | |
发表时间:2009-07-02
js 作用域的问题,当全局变量和局部变量同名时,局部覆盖全局,而局部此时未赋值,所以是undefined
|
|
返回顶楼 | |
发表时间:2009-07-03
定义一个function的时候会把内部声明的变量置顶
即可以看成 function test(){ var a; alert(a); 。。。 。。。 。。。 a=200; } |
|
返回顶楼 | |
发表时间:2009-07-03
但是b不也是这种情况吗,为什么它就不是undefined?
|
|
返回顶楼 | |
发表时间:2009-07-03
06softwaregaojie 写道 但是b不也是这种情况吗,为什么它就不是undefined?
b的作用域不同,它是全局变量。 |
|
返回顶楼 | |
发表时间:2009-07-06
这个是因为javascript的加载顺序有关,从小的作用域往外找。
LZ在test方法里面又声明了局部变量a,所以在test方法执行的时候就在test方法的作用域里面找变量a,但是a只是声明并没有赋值,所以alert(a)的时候就是undefined. 至于为什么变量b是true,是因为在test执行的时候,没有找到this.b,所以就在外部找,正好有一个全局变量b=true,所以alert(b)就是true,后面的内容就没啥好说的。 |
|
返回顶楼 | |
发表时间:2009-07-14
不是很明白,alert(b)时怎么会找外部的b,而alert(a)时不在外面找呢,??
|
|
返回顶楼 | |
发表时间:2009-07-14
lgpcl110 写道 不是很明白,alert(b)时怎么会找外部的b,而alert(a)时不在外面找呢,??
在test()方法内申明了var a=200;这个时候alert(a),就调用方法内申明的这个a。而方法内没申明b,只是给b重新赋值,所以alert(b)就之内找外面申明的那个b。 |
|
返回顶楼 | |
发表时间:2009-07-14
报未定义是在a 那儿的问题吗?
|
|
返回顶楼 | |