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

来源:互联网 发布:进销存数据分析 编辑:程序博客网 时间:2024/06/01 07:18

我们知道,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


0 0