谈谈ES6的let和const

在js中,变量只有两种,全局变量和局部变量,但是之前的版本并没有‘块级作用域‘这个说法,‘块级作用域’即所在的代码块 {} 内有效。例如:

{ 
    var x = 2; 
}
console.log(x) // 输出2

var x = 10;
{ 
    var x = 2;
}
console.log(x)  // 输出  2

但是ES6中增加了let关键字,使用let可以实现‘块级作用域’,例如:

{ 
    let x = 2;
}
console.log(x)  //报错, x is not defined

var x = 10;
{ 
    let x = 2;
}
console.log(x)// 输出 10

注意:在相同的作用域或块级作用域中,不能使用 let 关键字来重置 var 关键字声明的变量,也不能使用 const 关键字来重置 var 和 let关键字声明的变量
例如:

var x = 2;       // 合法
let x = 3;       // 不合法

{
    var x = 4;   // 合法
    let x = 5   // 不合法
}

//同样的
let x = 10;
{ 
    var x = 2;
}
console.log(x)// 输出 报错



var x = 2;         // 合法
const x = 2;       // 不合法
{
    let x = 2;     // 合法
    const x = 2;   // 不合法
}

另外,不仅仅在说明变量的时候var和let有区别,在循环作用域中,两者也有不同。在for循环中,var依然没有‘块级作用域’这个

//使用var
var i = 5;
for (var i = 0; i < 10; i++) {
    console.log(i);//0.1.2.3...9
}
console.log(i);//10

//使用let
let i = 5;
for (let i = 0; i < 10; i++) {
    console.log(i);//0.1.2.3...9
}
console.log(i);//5

在第一个实例中,使用了 var 关键字,它声明的变量是全局的,包括循环体内与循环体外。
在第二个实例中,使用 let 关键字, 它声明的变量作用域只在循环体内,循环体外的变量不受影响。

ES6除了增加变量关键字let以外,还增加了常量关键字const,用于声明一个或多个常量,声明时必须进行初始化,且初始化后值不可再修改:

const PI = 3.141592653589793;
PI = 3.14;      // 报错


var x = 10;
{ 
    const x = 2;
   console.log(x) //  2
}
console.log(x)//  10

但是const 定义的变量并非常量,并非不可变,使用 const 定义的对象或者数组,其实是可变的。例如:

// 创建常量对象
const car = {type:"Fiat", model:"500", color:"white"};

// 修改属性:
car.color = "red";
console.log(car.color)//red

但是我们不能对常量数组重新赋值:

const cars = ["Saab", "Volvo", "BMW"];
cars = ["Toyota", "Volvo", "Audi"];    // 错误
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容