JS红宝书学习-第3章 语言基础 --变量_var
时间:2021-07-05 17:20:44
收藏:0
阅读:0
3.3 变量-var
ES变量是松散类型的,意思是变量可以用于保存任何类型的数据。每个变量只不过是一个用于保存值得命名占位符。
当前有三个关键字可以声明变量:var,const,let。但是目前只有var可以再任一版本的ES中使用,而const和let只能在ES6及以后的版本使用。
1.var关键字
要定义变量,可以使用var操作符,后面跟变量名,如:
var num;
这行代码定义了一个名为num的变量,可以用来存储任何类型的值。(这个就是上边说的松散类型)在变量不初始化(就是赋值)的情况下会保存一个特殊值undefined。
我们一般使用的时候都会在创建时候同时赋值,如:
var num = 0;
在这里,num被定义为了一个数值为0的变量。
同时上面说的松散类型的另一种体现为,用户可更改已经赋值的变量类型,如:
num = ‘0‘;
此时把变量num从数值型的0 变为 字符型的‘0‘,这样是完全可以的,但是不推荐,其它的开发者在使用时可能不明确类型,然后很困扰,尤其是强类型的语言开发者,由此也诞生出了TS。
不过这也是JS的魅力。有利有弊~
2.声明作用域
有了变量那么变量的作用域。当你声明一个var变量时,var变量会成为包含它的函数的局部变量。当变量在函数退出后会自动销毁,如:
function demo(){
var num = 0; // demo的局部变量
}
demo(); // 在此行执行完毕后,num会被销毁
console.log(num);// 销毁了,找不到报错
如果不想报错,那么我们的可以省略var操作符,创建一个全局变量:
function demo(){
num = 0; // 全局变量
}
demo(); // 在此行执行完毕后,num不会被销毁
console.log(num);// 0
虽然省略var会定义为全局变量,但不建议这样做。在局部作用域中定义的全局变量很难维护,而且会给人造成困扰,同时在语法检查器下无法执行,以及严格模式下会抛出错误ReferenceError。
如果想同时定义多个变量,可以在一条语句中使用逗号分隔每个变量,如:
var name = ‘张三‘, age = 18;
3.声明提升
我们目前知道的变量都是先声明在使用,但是使用var关键字声明时,会提升到作用域顶部,如:
function test(){
// 提升到了这个地方
// var num;
console.log(num);
var num = 0; // 此处变量提升
}
test() // undefined
这样本该报错的代码就,就因为这一特性没有报错。
所谓提升(hoist),也就是把所有变量声明都拉到函数作用于的顶部。此外,反复多次使用var声明同一个变量也没有问题:
function test(){
var num = 0; // 我声明
var num = 1; // 我再声明
var num = 2; // 哎,就是玩,就不报错
console.log(num);
}
test(); // 2
加油。
评论(0)