黄子涵

3.9 变量声明

在 JavaScript 程序中,使用一个变量之前应当先声明。变量是使用关键字 var 来声明的,如下所示:

var i;
var sum;

也可以通过一个 var 关键字来声明多个变量:

var i,sum;

而且还可以将变量的初始赋值和变量声明合写在一起:

var message = "hello";
var i = 0, j = 0, k = 0;

如果未在 var 声明语句中给变量指定初始值,那么虽然声明了这个变量,但在给它存入一个值之前,它的初始值就是 undefined。

var hzh;
[Running] node "e:\HMV\JavaScript\JavaScript.js"
undefined

[Done] exited with code=0 in 0.503 seconds

我们注意到,在 for 和 for/in 循环中同样可以使用 var 语句,这样可以更简洁地声明在循环体语法内中使用的循环变量。例如:

for(var i = 0; i < 10; i++) console.log(i);
for(var i = 0, j = 10; i < 10; i++,j--) console.log(i*j);
for(var p in o) console.log(p);

如果你之前编写过诸如 C 或 Java 的静态语言,你会注意到在 JavaScript 的变量声明中并没有指定变量的数据类型。JavaScript 变量可以是任意数据类型。例如,在 JavaScript 中首先将数字赋值给一个变量,随后再将字符串赋值给这个变量,这是完全合法的:

var i = 10;
i = "ten";

编程语言分为动态(类型)语言和静态(类型)语言,动态类型语言是指在运行期间才去做数据类型检查的语言,也就是说,在用动态类型的语言编程时,永远也不用给任何变量指定数据类型,该语言会在第一次赋值给变量时,在内部将数据类型记录下来。

Python、Ruby 和 JavaScript 就是典型的动态类型语言。静态类型语言与动态类型语言刚好相反,它的数据类型是在编译其间检查的,也就是说在写程序时要声明所有变量的数据类型,C/C++ 是静态类型语言的典型代表,其他的铮态类型语言还有 C#、JAVA 等。

重复的声明和遗漏的声明

使用 var 语句重复声明变量是合法且无害的。如果重复声明带有初始化器,那么这就和一条简单的赋值语句没什么两样。

如果你试图读取一个没有声明的变量的值,JavaScript 会报错。在 ECMAScript 5 严格模式中,给一个没有声明的变量赋值也会报错。然而从历史上讲,在非严格模式下,如果给一个未声明的变量赋值,JavaScript 实际上会给全局对象创建一个同名属性,并且它工作起来像(但并不完全一样)一个正确声明的全局变量。这意味着你可以侥幸不声明全局变量。但这是一个不好的习惯并会造成很多bug,因此,你应当始终使用 var 来声明变量。

posted @ 2022-05-25 10:18  黄子涵  阅读(45)  评论(0编辑  收藏  举报