JavaScript中变量声明又分为显示声明和隐式声明。显示声明中的关键词有var、let、const、function、class、import ;另外,隐式声明就是不使用关键字,直接进行变量的赋值。
我们分以下几种情况探究它们的区别
- 在全局作用域下
使用var 和function显示声明的变量为全局变量,会挂载在window上,使用let声明的变量不会挂载到window
隐式声明的变量默认是挂载在window
必须执行隐式声明这代码 全局上才会有这个属性
var a = 2;
b = 3;//隐式声明(**为全局变量的一个属性**)
console.log(window.a) //2
console.log(window.b) //3
console.log(window.bbb)//函数bbb
function bbb(){
}
bbb()
console.log(window.bbb)//函数bbb
- 在函数作用域下
如果在函数中,显示声明变量为局部变量,隐式声明为全局变量
function fun() {
var bb = 5;
aa = 4;
}
fun()
//当函数执行后 才可以打印aa=4
console.log(aa) //4
-
关于变量提升
console.log(aaa) //undefined //console.log(bbb)//bbb is not defined console.log(test) //函数test var aaa = 7; bbb = 8; function test() {} console.log(aaa) //7 console.log(bbb) //8
使用var 声明的变量存在变量声明提升(不包括赋值),使用function声明的变量也存在函数提升,隐式声明变量不存在提升。更多关于变量提升请看变量声明提升和函数声明提升
-
隐式声明的变量可以被delete (delete的用法)
var a = 2; b = 3; delete a; // 任何使用 var 声明的属性不能从全局作用域或函数的作用域中删除 console.log(delete a) //false console.log(delete b) //true console.log(a) //2 //console.log(b)//b is not defined