ES6学习笔记一:let、const与作用域

前言

此系列文章用于记录小萌新的ES6的学习经历如有什么错误或者不好的地方请各位大佬多多指教


一、ES6新增块关键字let、const

在ES5中只有var关键字来定义变量,ES6新增了两个关键字let和count对变量进行声明,
并且在ES5中作用域方面不支持块级作用域。而ES6添加这两个关键字就是为了划分块级作用域


二、let关键字

2.1.基本方法

ES6 新增了 let 命令,用于声明变量。其用法类似于 var ,但是所声明的变量只在 let命令所在的代码块内有效。

代码如下(示例):

{
    
    
	let a = 10; 
	var b = 1; 
}
console.log(b); // 1
console.log(a); // ReferenceError: a is not defined

上面的代码在let声明的块作用域外进行使用会报错, 而var返回了正确的值,所以let只能在所定义的块作用域里面进行使用

注意:
代码如下(示例):

{
    
    
    var b = 5;
    var b = 1;
    console.log(b); // 1
}
{
    
    
    let a = 10;
    let a = 1;
    console.log(a); // SyntaxError: Identifier 'a' has already been declared
}

上面的代码var声明的变量可以重新定义覆盖,而let不能重新定义相同名字的变量。

2.2.不存在变量提升

在js中var定义变量时,会出现变量提升的现象即在定义变量之前进行使用会显示var为undefined并不会报错。而let所定义的变量则没有变量提升的问题。

代码如下(示例):

console.log(b); // undefined
var b = 1; 

console.log(a); // ReferenceError: a is not defined
let a = 10; 

2.3.暂时性死区

S6明确规定,如果区块中存在let和const命令,则这个区块对这些命令声明的变量从一开始就形成封闭作用域。
在代码块内,使用let命令声明变量之前,该变量都是不可用的,这个区域被称为“暂时性死区”。

{
    
    
    var temp = 123;
    if (true) {
    
    
        console.log(temp); //ReferenceError: Cannot access 'temp' before initialization
        let temp;
    }
}

三、const关键字

3.1.基本方法

声明一个只读的常量,一旦声明,其值不能改变且必须立即初始化。
除此之外,与let用法一致。

在下面这种情况当常量保存的不是一个值,而是一个地址的时候,该常量所引用的对象是可以更改成员的,只是不能更改该常量保存的地址。

{
    
    
const foo={
    
    y:10};
foo.x=100;
console.log(foo.x);
foo={
    
    n:1000};
}

总结

例如:以上就是今天要讲的内容,本文仅仅简单介绍了ES6的let和const关键字的使用。

猜你喜欢

转载自blog.csdn.net/weixin_44258327/article/details/115448973