变量的声明关键字
var
与let
和swift
很像,但是考虑到语言先后的时间swift
是在模仿js
,在swift
语言中可以根据编译器自动判断变量的数据类型,而在js
中也完全不用管数据类型,直接使用就好。
var:
var
在js
的语法的ES5
规范中并没有块级作用域的说法,这一点有区别于其他语言,所以在一段代码中如果声明了var
变量那么这个变量就是全局的在if
...else
的判断{}
中与for
循环中var
所声明的变量也是全局的。
var
的变量提升,在js的语言中因为变量和函数的变量提升,所以可以先调用,后声明如下:
// 这个时候输出的是undefined,表示的是一个未初始化的空值,在其他语言中有可能就直接找不到这个变量而报错了。
console.log(a);
var a = 20;
但是在其他部分语言中是不可以先使用后声明的包括ES6
中新声明的let
也不可以所以不建议利用变量提升的写法,尽量先声明在使用。
var
声明的变量属于全局变量,会挂载到window
上。
let:
let
关键字是ES6
中新出现的,在swift
中var
是变量而let
是常量。
在js
中 let
在一段代码中只可以出现一次,而所谓的一段代码就是一个{}
,在一个{}
中let
一旦出现,它所声明的变量就只可以有一份,不允许变量提升,也不可以重复声明(形参同变量名也不可以),并且在{}
作用域消失后,let的变量释放,即外部作用域不可以访问内部作用域的值。
let
声明的变量属于局部变量,不会挂载到window
上。
const:
第一次接触const
是在C
语言中,JS
的const
用法与C
基本相同。
const
作用是修饰的变量值本身不可以被改变,值得注意的是变量中如果储存的是复杂数据类型如对象,那么变量本身所储存的是变量的地址,地址不可以改变但是地址内所储存的数据挂载的属性是可以改变的。代码如下:
const a = "张三";
a = "李四"; // 这个时候 会报错 因为a的值不可以修改.
const obj = new Object();
obj.name = "object"; // 可以修改 因为const所修饰变量obj本身的地址没有改变
const
基本与let
使用方式相同。
总结:
var
当需要用到全局变量的时候使用。
let
需要局部变量的时候使用。
const
定义一个值不允许改变的时候使用。
在代码块中尽可能的使用let
,变量与函数尽可能的先声明在调用。