关于JavaScript变量声明及其初始化的问题

我们知道,js变量应通过var来定义,例如:

var a;

这种定义方式只定义了变量名,但没给初值。不过,js在编译时会自动赋予undefined初值。如果要给明确的初值可这样定义:

var a = 123;

请看下面的代码:

alert(a);
var a = 123;

上面的代码在var之前就用到了变量。一般我们认为这样的程序会报错,可是实际运行后我们发现程序并未报错,而是alert输出了undefined(undefined也是个值)。这是为什么呢?

在回答这个问题之前,再看下面的代码:

alert(a);
a = 123;

这段代码与上一段代码的区别在于去掉了var关键字。可是运行后我们发现程序报错了。这又是为什么呢?

为回答这个问题,我们就必须了解js的一些内部机制。这篇教程说得非常细致。

首先,我们知道js里除了对象什么也没有。那么上面的变量a又是什么呢?其实,在<script>...</script>标签下(不在函数里)直接写的var我们称之为顶层变量,不过严格说来顶层变量不应该称为变量,而是window对象的一个属性。window对象在浏览器解析<script>...</script>标签时会自动先查找出通过var定义的变量,然后马上作为window的一个属性,并初始化为undefined。并且,即使如果我们在var定义时给了初值,window的这个新属性仍然被初始化为undefined。

回过头来看看前面的代码:

alert(a);
var a = 123;

这段代码被解析后相当于这样:

var a;
alert(a);
a = 123;

因此我们看出,alert输出为undefined了。

再看看前面的另一段代码:

alert(a);
a = 123;

这段代码被解析时并未发现有var关键字,因此执行到alert(a)时,就等于执行alert(window.a),而window对象尚没有a属性,当然就报错了。

再次强调,请仔细阅读这篇教程,您一定收获不小。同时也请您把前后各章节都仔细阅读,相信对您提高js有相当大的帮助。

教程:http://javascript.info/tutorial/initialization

转载地址:http://www.cnblogs.com/yang-wu/archive/2012/10/31/2748944.html


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值