开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 N 天,点击查看活动详情
js中变量的特征
js的变量是松散类型的。变量可以用于保存任何类型的数据。所以js也被称为弱类型语言。
定义变量的方法
var
要定义变量,可以使用 var 操作符(注意 var 是一个关键字),后跟变量名(即标识符,如前所述):
var message;
这行代码定义了一个名为 message 的变量,可以用它保存任何类型的值。(不初始化的情况下,变
量会保存一个特殊值 undefined,下一节讨论数据类型时会谈到。)ECMAScript 实现变量初始化,因
此可以同时定义变量并设置它的值:
var message = "hi";
这里,message 被定义为一个保
在这个例子中,变量 message 首先被定义为一个保存字符串值 hi 的变量,然后又被重写为保存了
数值 100。虽然不推荐改变变量保存值的类型,但这在 ECMAScript 中是完全有效的。
- 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 天,点击查看活动详情