Iwen's blog Iwen's blog
首页
  • 前端文章

    • JavaScript
    • Vue
  • 学习笔记

    • 《JavaScript教程》笔记
    • 《JavaScript高级程序设计》笔记
    • 《ES6 教程》笔记
    • 《Vue》笔记
    • 《TypeScript 从零实现 axios》
    • 小程序笔记
  • HTML
  • CSS
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • Linux
  • 学习
  • 面试
  • 心情杂货
  • 友情链接
  • 网站
  • 资源
  • Vue资源
  • 分类
  • 标签
  • 归档
复盘
关于

Iwen

不摸鱼的哥哥
首页
  • 前端文章

    • JavaScript
    • Vue
  • 学习笔记

    • 《JavaScript教程》笔记
    • 《JavaScript高级程序设计》笔记
    • 《ES6 教程》笔记
    • 《Vue》笔记
    • 《TypeScript 从零实现 axios》
    • 小程序笔记
  • HTML
  • CSS
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • Linux
  • 学习
  • 面试
  • 心情杂货
  • 友情链接
  • 网站
  • 资源
  • Vue资源
  • 分类
  • 标签
  • 归档
复盘
关于
  • Vue

  • Vue进阶

  • CSS

  • ES6

    • let 和 const
      • 暂时性死区
      • 块级作用域
    • Set 和 Map 数据结构
    • Class
    • 函数
  • Base

  • Core

  • Array

  • Object

  • String

  • Async

  • Browser

  • Http

  • 性能优化

  • 正则

  • 经典总结

  • 设计模式

  • 数据结构

  • 算法

  • 手写

  • TypeScript

  • 复盘
  • ES6
Mr.w
2020-11-29

let 和 const

# let 和 const

let与const共同点:

  • 不能重复声明
  • 具有块级作用域
  • 变量不会提升

不同点:

  • let:可修改值
  • const: 声明的变量必须提供值,不能重新赋值,可修改引用类型的属性值

# 暂时性死区

我们都知道,JS引擎扫描代码时,如果发现变量声明,用var声明变量时会将声明提升到函数或全局作用域的顶部。

但是let或者const,会将声明关进一个小黑屋也是TDZ(暂时性死区),只有执行到变量声明这句语句时,变量才会从小黑屋被放出来,才能安全使用这个变量。

console.log(c); //undefined

var c = 10;

console.log(d); // 报错ReferenceError

let d = 8;

if(true){
    console.log(tmp);  // 报错
    let tmp;
    console.log(tmp); // undefined
}
if(true){
    let tmp;
    tmp = 234;
    console.log(tmp); //234
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

# 块级作用域

在{}花括号内的代码块即可以认为let和const的作用域。

let可以修改值,但不能在一个代码块内重复声明

{
    let aa = 1;
    console.log(aa) //1
}

(function(){
    let aa = 3;
    console.log(aa) //3
    {
        let cc = 4
        console.log(cc) //4
    }
    console.log(cc); // cc is not defined
})()

console.log(aa); // aa is not defined

{
    let bb = 1;
    let bb = 11; // 报错 重复声明
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

const声明的变量必须提供一个值,而且会被认为是常量,意思就是它的值被设置完成后就不能再修改了。

还有,如果const的是一个对象,对象所包含的值是可以被修改的。抽象一点儿说,就是对象所指向的地址不能改变,而变量成员是可以修改的。

const name = 10;
name = 20; // 报错 不予许修改

const nfc = { name : 'xiaobai' };
nfc.name = 'xiao';      // 可以修改对象里面的值
nfc = { name : 22 }     // 报错
1
2
3
4
5
6
CSS 揭秘
Set 和 Map 数据结构

← CSS 揭秘 Set 和 Map 数据结构→

最近更新
01
flex布局页面自适应滚动条问题
12-28
02
前后端分离开发请求接口跨域如何携带cookie的问题
12-28
03
怎么实现div长宽比固定width-height4比3
12-28
更多文章>
Theme by Vdoing | Copyright © 2017-2022 Iwen | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式