let和const声明变量和常量

在ES6之前,JavaScript中声明一个变量会使用var关键字。

var a = 1;

var声明的变量具有“变量提升”这个“特性”,导致JavaScript的变量看起来非常诡异,下面是一个很反直觉的例子。

function foo(condition) {
    if(condition) {
        var a = 10;
    } else {
        //在这里访问变量a,得到的是undefined,而不是变量未定义错误
        console.log(a);
    }
}

按正常人的“编程审美”,上面代码运行到console.log(a);应该报个错:变量未定义。但JavaScript就偏偏不这样设计,上面代码中var定义的变量,对于思维正常的人来说应该如下这样理解。

function foo(condition) {
    var a;
    if(condition) {
        a = 10;
    } else {
        //在这里访问变量a,得到的是undefined,而不是变量未定义错误
        console.log(a);
    }
}

用let声明变量

ES6标准推荐使用let取代var声明变量,具体的改进就不详细说了,总而言之就是let声明的变量没有var那种诡异的“变量提升”特性,适用于思维正常的人。

let声明的变量具有的特性:

  • 有传统类C语言的块级作用域
  • 不能重复声明
  • 不存在覆盖全局对象属性的问题,比如在全局作用于下,用var声明的变量会覆盖window对象的属性

用const声明常量

使用const可以声明常量,常量和let声明的变量具有相同的块级作用域。

  • const声明的常量必须在声明时赋值
  • 常量不能重新赋值,如果常量是对象的引用,对象的属性值可以随意改
作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。