浅析var,let,const之间的区别

37 阅读1分钟

前导知识点:

闭包

概念:内部函数可以访问外部函数的作用域

function fn1(){

var name="jiayu";

  function fn2(){
  
  alert(name);
  
  }
  
fn2();

}
fn1();
  • var变量提升(在声明之前使用,值为undefined):
console.log(a);//undefined

var a=100;

console.log(a);//100

var a="hello";

console.log(a);//hello 可以重复声明

console.log(window.a);//var声明的全局变量会附着window上,作为其属性存在
  • var 声明的变量仅支持全局作用域和函数作用域,不支持代码块
if(true){

var v1=100;

var v2=200;

}

console.log(v1);//100 

console.log(v2);//200

- 在for环境下使用var

var fs=[];

for(var i=0;i<5;i++){
 
 fs[i]=function (){
 
 console.log(i);
 
 };//函数表达式+;
 
}

fs[0]();//调用时,i在for()内已经执行完毕
  • 如何让i可以成为0,1,2,3,4,5
    fs[i]=(function(n){
    
        return function(){
        
            console.log(n);
            
        };
        
    })(i);//立即执行函数(闭包-局部作用域)
    
    fs[0]()//0
    

//const(常量)与let(变量)相似

  • let不存在变量提升
console.log(a);//报错

let a=100;

console.log(a);//100

let a="hello";

console.log(a);//不可以重复声明

console.log(window.a);

//for

        const fn=[];
        
        for(let i=0;i<5;i++){
        
            fn[i]=function(){
            
                console.log(i);
                
            };
            
        }//闭包
        
        fn[0]()//0 

--拓展

        const point={x:10,y:20};

        console.log("This point at (" + point.x+","+point.y+")");
        
        console.log(`This point at(${point.x},${point.y})`);


//解构赋值

        let[x,y]=[2,3];
        
        let{x:a,y:b}=point;