js中最熟悉的莫过于是var,这也是我们使用最多的,我们常用这个来声明全局变量,并且可以多次赋值,但是这也容易使定义的变量被污染:
1.先说下var:
var a = 1; //此处声明的变量a为全局变量
function test(){
var a = 2;//此处声明的变量a为函数foo的局部变量
console.log(a);//2
}
test();
console.log(a);//1
所以,一般使用var来定义全局变量,也可以反复定义。而且因为JS存在预解析的原因,会存在变量提升,列如:
console.log(a) // 打印出来是undefined,不会报错
var a = 1
2.let 是es6中用来声明变量的,相比较于 var 来说不存在变量提升,同一作用域下不能重复定义:
let tt = 11
let tt =3
// 报错不能重复定义:VM75:2 Uncaught SyntaxError: Identifier 'tt' has already been declared
console.log(a) // 报错未定义
let a = 9
let b = 9
function kk (){
let b = 22
console.log(b) // 22 后被调用
}
console.log(b) // 9 先打印
kk()
let wo = 90
if(true){
let wo = 78
}
console.log(wo) // if 里面的变量是一个作用域,不受外面的定义的变量影响
3.最后一个就是const,也是es6中才有的,和let使用差不多,区别就是:const 定义的变量是只读性质的;
const bb // 没赋值,会报错。let 声明变量没赋值不会报错
const pp = 90
const pp = 80 // 会报错,不能重复定义,只读模式定义后不能再次重复定义
const kk = {}
kk.name = '小米' // 不会报错,对象是一个地址,而不是具体的值,当对象添加属性后,具体地址会指向具体的值。