js变量的显示声明和隐式声明

950 阅读1分钟

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