注册 登录
编程论坛 JavaScript论坛

刚学、求解答

刘思乐 发布于 2013-08-08 21:23, 1273 次点击
<html>
 <script>
    var a=9
   function dd()
    {
    return a;
    var a=5;
    }
    alert(dd())//undefined
 </script>
 </html>
14 回复
#2
love云彩2013-08-09 00:40
你也得先说你哪里不懂,发一段代码上来就求解答,谁知道你想知道些什么?
#3
java小蚂蚁2013-08-09 17:12
<html>
<script>
    var a=9
   function dd()
    {
    return a;
    var a=5;
    }
    alert(dd())//undefined
</script>
</html>
这段代码发上来是想干嘛?
alert(dd())//undefined这句话是什么意思,这什么注释?alert()的分号呢。这样能弹出对话框吗?
var a= 9的分号呢?
这html的结构也不对啊,这怎么敲的,才几行啊?
修改下:
<html>
<head>test</head>
<body>
<script>
    var a=9;
   function dd()
    {
    return a;
    var a=5;
    }
    alert(dd());//undefined
</script>
</body>
</html>
这个结果应该是9,你不会是想问这个吧,return之后的已经运行不到了。
#4
有容就大2013-08-09 17:33
是啊 楼主你要问什么捏 难道来出谜语么
#5
孙小强2013-08-09 23:14
回复 3楼 java小蚂蚁
为什么是undefine呢,我也是刚学。求解答
#6
liangyua2013-08-10 08:35
我也是新手啊,暑假苦逼的自学着呢,正看数据结构,看视频感觉还是有帮助的。多思考吧,不要有思维惰性,前几天看一个迷宫问题,就看了一天。希望我们能成为朋友吧
#7
刘思乐2013-08-11 22:58
回复 2楼 love云彩
不好意思,没写清楚。可以把代码复制并在ie上运行,其结果是undefined.为什么是undefined?不是9么?
#8
刘思乐2013-08-11 23:00
回复 3楼 java小蚂蚁
我觉的也是9但结果是undefined?为什么呢?
#9
刘思乐2013-08-11 23:01
回复 5楼 孙小强
还是你懂我
#10
love云彩2013-08-11 23:14
以下是引用刘思乐在2013-8-11 23:00:23的发言:

我觉的也是9但结果是undefined?为什么呢?

出现undefined的情况是你只是声明变量没有初始化,你有没有按照三楼的修改?var a=9;加了分号没有?
#11
刘思乐2013-08-11 23:20
回复 10楼 love云彩
把3楼的代码复制执行后,也是undefined.javascript是允许可不加分号的
#12
love云彩2013-08-11 23:25
以下是引用刘思乐在2013-8-11 23:20:34的发言:

把3楼的代码复制执行后,也是undefined.javascript是允许可不加分号的

明天我再帮你调试,现在电脑不在身边!
我知道javascript允许不加分号,但并不是所有的浏览器都能正常编译通过,不推荐这种写法,楼主要改掉这想法
#13
刘思乐2013-08-11 23:29
以下是引用love云彩在2013-8-11 23:25:01的发言:


明天我再帮你调试,现在电脑不在身边!
我知道javascript允许不加分号,但并不是所有的浏览器都能正常编译通过,不推荐这种写法,楼主要改掉这想法


那先谢谢了
#14
love云彩2013-08-12 10:41
首先,有两点需要知道:
1.一个js代码段在执行之前,首先会把‘var’声明的变量进行预处理(相当于在执行之前标识出这些变量已经存在,但仅仅是标识出存在而已,并不根据实际代码对他们进行赋值而是赋值undefined)。
2.函数在执行的时候,如果出现关于变量的操作,那么他会首先在内部查找有无该变量,如果没有再从包含它的函数或者全局一层一层往外查找。

因此,具体到你的代码:
dd在执行return a;的时候首先查找自己内部有没有变量a,显然是存在变量a的(因为var a=5已经在整个js段的执行前被预处理了,即声明变量a已经存在于dd内部),所以会返回a的值,但是:虽然a已经存在,但是a的赋值在return语句之后且不会被执行,所以当前a的值为undefined,所以dd()返回的是undefined。
dd中的a和外部的a是两个仅仅名字相同但是毫无关系的变量,dd操作的是它自己内部的a。

关于上面提到的2点,如果想了解的更透彻,楼主可以自行google“js执行顺序”和“js词法作用域”两个关键字。
#15
lieren_li2013-08-19 11:01
应该是局部变量屏蔽了全局变量,而在你return a;之前局部变量a还没有被定义。
另外,js中只要不引起混淆,每行最后的分号是可以省略的
1