JavaScript中var、let和const的区别

JavaScript中var、let和const的区别


var声明

无论变量在何处被声明,使用关键字var声明的变量,都会被当作在当前作用域顶部声明的,这个现象被称作变量提升。

function getValue(){
     if(condition){
          var value = 'something';      
      return value;
     }else{
          return null    
      }
}

等价于

function getValue(){
     var value;
     if(condition){
          value = 'something';    
          return value;    
     }else{
          return null    
      }
}

在循环中,使用var关键字也很容易造成误会

for(var i = 0;i < 10;i++){
      console.log(i);  
}

最终会返回10次10而不是预想中的0到9,并且在循环外也能访问变量i。

在同一作用域下不能重复声明变量,但可以在嵌套的代码块中声明。

在全局作用域中使用var关键字时,会覆盖window对象中的属性;

let声明

使用let声明时,可以把变量的作用域限制在当前代码块中,形成块级作用域,并且没有变量提升的现象。

for(let i = 0 ; i < 10; i++){
      console.log(i);  
}

使用let在循环中可以分别打印0到9

const声明

const声明和let都是块级标识符,执行到代码块外会被销毁;

const声明的常量一旦设定便不能修改,并且必须要进行赋值初始化;

当用const声明对象时,可以修改对象的值,但不能修改变量与对象的绑定。

const person = {
      name:'jack'  
};
person.name = 'rose';

//抛出语法错误
person = {
     name:'greg'  
};

在全局作用域中使用let,const关键字时,不会覆盖window对象中的属性;

原文地址:https://www.cnblogs.com/xianglan666/p/13942016.html