变量

59 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 N 天,点击查看活动详情

js中变量的特征

js的变量是松散类型的。变量可以用于保存任何类型的数据。所以js也被称为弱类型语言。

定义变量的方法

var

要定义变量,可以使用 var 操作符(注意 var 是一个关键字),后跟变量名(即标识符,如前所述):

var message;

这行代码定义了一个名为 message 的变量,可以用它保存任何类型的值。(不初始化的情况下,变

量会保存一个特殊值 undefined,下一节讨论数据类型时会谈到。)ECMAScript 实现变量初始化,因

此可以同时定义变量并设置它的值:

var message = "hi";

这里,message 被定义为一个保

在这个例子中,变量 message 首先被定义为一个保存字符串值 hi 的变量,然后又被重写为保存了

数值 100。虽然不推荐改变变量保存值的类型,但这在 ECMAScript 中是完全有效的。

  1. var 声明作用域

关键的问题在于,使用 var 操作符定义的变量会成为包含它的函数的局部变量。比如,使用 var

在一个函数内部定义一个变量,就意味着该变量将在函数退出时被销毁:

function test() {

var message = "hi"; // 局部变量

}

test();

console.log(message); // 出错!

这里,message 变量是在函数内部使用 var 定义的。函数叫 test(),调用它会创建这个变量并给

它赋值。调用之后变量随即被销毁,因此示例中的最后一行会导致错误。不过,在函数内定义变量时省

略 var 操作符,可以创建一个全局变量:

function test() {

message = "hi"; // 全局

使用 var 时,下面的代码不会报错。这是因为使用这个关键字声明的变量会自动提升到函数作用域

顶部:

function foo() {

console.log(age);

var age = 26;

}

foo(); // undefined

之所以不会报错,是因为 ECMAScript 运行时把它看成等价于如下代码:

function foo() {

var age;

console.log(age);

age = 26;

}

foo(); // undefined

这就是所谓的“提升”(hoist),也就是把所有变量声明都拉到函数作用域的顶部。

句末语

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 N 天,点击查看活动详情