• 作者:陈大鱼头
  • github: KRISACHAN
  • 链接:github.com/YvetteLau/S…
  • 背景:最近高级前端工程师 刘小夕github 上开了个每个工作日布一个前端相关题的 repo,怀着学习的心态我也参与其中,以下为我的回答,如果有不对的地方,非常欢迎各位指出。

什么是提升?(hoisting)

函数提升与变量提升

首先我们来看一段代码

console.log(变量) // undefined
var 变量 = 1
复制代码

从上面的代码来看,虽然变量还没有被声明,但是我们却可以使用,这种情况就叫做变量提升。

再来一段代码

console.log(变量) // ƒ 变量() {}
function 变量() {}
var 变量 = 1
复制代码

上面的代码叫做函数提升,函数提升跟变量提升差不多,就是函数提升优先级比变量高。

从上可知,使用 var 声明的变量会被提升到作用域的顶部。

let、const、var的区别

let、const、var的提升

首先我们再来看一段代码

var a = 1
let b = 1
const c = 1
console.log(window.b) // undefined
console.log(window.c) // undefinedfunction test(){console.log(a)let a
}
test()
复制代码

首先在全局作用域下使用 letconst 声明变量,变量并不会被挂载到 window上,这一点就和 var 声明有了区别。

再者当我们在声明 a 之前如果使用了 a,就会出现报错的情况。

首先报错的原因是因为存在暂时性死区,我们不能在声明前就使用变量,这也是 letconst 优于 var 的一点。然后这里你认为的提升和 var 的提升是有区别的,虽然变量在编译的环节中被告知在这块作用域中可以访问,但是访问是受限制的。

let、const、var 创建的不同

letconst 声明定义了作用于 正在运行的执行上下文(running execution context)词法环境(LexicalEnvironment) 的变量。

letconst 声明的变量是在词法环境实例化时创建的,但是给变量赋值的原生功能 LexicalBinding 以及变量初始化的功能 Initializer 是在之后执行的,而不是在创建变量时,所以在执行之前无法以任何方式访问它们,这就是 暂时性死区

var语句声明了作用于 正在运行的执行上下文(running execution context)变量环境(VariableEnvironment) 的变量。

var 声明的变量同样是在词法环境实例化时创建的,并且创建时就赋值有 undefined,在任何的 变量环境(VariableEnvironment)中,var变量 的绑定可以出现多个,但是最终值是由 赋值时确定的,而不是创建变量时。

词法环境(LexicalEnvironment)与变量环境(VariableEnvironment)

  • 词法环境(LexicalEnvironment):简单来说就是 ECMASCRIPT 中的书写语法的上下文语法环境。
  • 变量环境(VariableEnvironment):简单来说就是 执行上下文 中专门存储变量跟该变量赋值的一个对象。

总结:let constvar 不同的原因是 let const 的创建是基于词法环境,而 var 是基于变量环境。。用通俗的话来说就是,不是同一个系统的...

如果你、喜欢探讨技术,或者对本文有任何的意见或建议,你可以扫描下方二维码,关注微信公众号“鱼头的Web海洋”,随时与鱼头互动。欢迎!衷心希望可以遇见你。

前端进阶之 let、const、var相关推荐

  1. 银行前端面试高频基础问题——var、let和const到底有哪些区别?讲不清楚当场发感谢信!?

    银行前端面试高频基础问题--var.let和const到底有哪些区别?讲不清楚当场发感谢信!? 面试官:知道const.let和var吧,说说他们的区别吧 我:- - 前言 可以说这是银行我们面试遇到 ...

  2. 大前端进阶!NodeJS、Npm、Es6、Babel、Webpack、模块化开发

    文章目录 大前端进阶 一.Node.js 1.1.Nodejs介绍和安装 1.2 .Nodejs入门 1.2.1.快速入门-Hello World 1.2.2.Node - 实现请求响应 1.2.3. ...

  3. LEARN_前端进阶_深浅拷贝原理

    详细解析赋值.浅拷贝和深拷贝的区别 赋值(Copy) 赋值是将某一数组或对象赋给某个变量的过程,分类下面 2 部分: 基本数据类型:赋值,赋值之后两个变量互不影响 引用数据类型:赋址,两个变量具有相同 ...

  4. 2021年高级前端进阶之路

    YYDS 2021年高级前端进阶之路1.两边固定,中间自适应布局(1.用flex;2.用display:left;3.用相对定位和绝对定位结合)2.js判断字符串中出现次数最多的字符(1.用for循环 ...

  5. 3万6千字爆肝,前端进阶不得不了解的函数式编程开发,含大量实例,手写案例,所有案例均可运行

    3w6爆肝,前端进阶不得不了解的函数式编程开发,含大量实例,手写案例,所有案例均可运行 认识函数式编程 函数相关复习 函数是一等公民 高级函数 函数作为参数 案例 1,模拟 forEach 案例 2, ...

  6. fifo算法_前端进阶算法6:一看就懂的队列及配套算法题

    引言 队列这种数据结构,据瓶子君了解,前端需要了解的队列结构主要有:双端队列.滑动窗口,它们都是算法中是比较常用的数据结构. 因此,本节主要内容为: 数据结构:队列(Queue) 双端队列(Deque ...

  7. IT:前端进阶技术路线图(初级→中级→高级)之初级(研发工具/HTML/CSS/JS/浏览器)/中级(研发链路/工程化/库/框架/性能优化/工作原理)/高级(搭建/中后台/体验管理等)之详细攻略

    IT:前端进阶技术路线图(初级→中级→高级)之初级(研发工具/HTML/CSS/JS/浏览器)/中级(研发链路/工程化/库/框架/性能优化/工作原理)/高级(搭建/Node/IDE/中后台/体验管理/ ...

  8. 【2019 前端进阶之路】深入 Vue 响应式原理,活捉一个 MVVM

    作者:江三疯,专注前端开发.欢迎关注公众号前端发动机,第一时间获得作者文章推送,还有各类前端优质文章,致力于成为推动前端成长的引擎. 前言 作为 Vue 面试中的必考题之一,Vue 的响应式原理,想必 ...

  9. 前端进阶之路: 前端架构设计(2)-流程核心

    可能很多人和我一样, 首次听到"前端架构"这个词, 第一反应是: "前端还有架构这一说呢?" 在后端开发领域, 系统规划和可扩展性非常关键, 因此架构师备受重视 ...

  10. 前端进阶必备技能:Vue中如何定制动画效果

    作为前端程序员,前端火起来的短短几年里技术更新迭代特别快,不仅是新的框架繁多,Vue,React,Angular轮番上场,各种工具,插件,库也是琳琅满目,就连基础的JavaScript语法的更新也是年 ...

最新文章

  1. 比尔盖茨聘请投资高手,26年亏掉4300亿美金!
  2. (总结)CentOS 6.x使用yum快速安装Apache+PHP+Tomcat(JSP)+MySQL
  3. 人脸识别损失函数笔记
  4. 分享Java面试中的几个重要基础问题
  5. 高德地图 amap 设置鼠标样式
  6. python 函数可以作为容器对象的元素_python基础(十四):函数对象与闭包
  7. 详解Python中genfromtxt的用法(numpy)
  8. 面向对象 —— 类设计(九) —— 类设计的内在一致性
  9. 艾默生变频器报警PHP,艾默生/Emerson变频器启动就报警维修很牛
  10. python正则表达式代码_python正则表达式实例代码
  11. java外文书籍下载_Web开发经典技术图书(英文版居多),欢迎下载阅读 - 程序语言 - 小木虫 - 学术 科研 互动社区...
  12. Sql Server 2008 配置服务器,并让客户端连接
  13. gtx1050ti安装win10和ubuntu16.04双系统
  14. 《GAMES104-现代游戏引擎:从入门到实践》-04 学习笔记
  15. 计算机主机启动不了系统安装系统安装软件,电脑主机启动不了怎么办
  16. 微信公众号都有哪些营销技巧
  17. 史上最全的Simplis安装教程
  18. 公司企业邮箱怎么选择?买企业邮箱要考虑什么?
  19. IT英文原版书籍专业词汇积累
  20. java 牛生小牛_牛生小牛的递归算法

热门文章

  1. oracle clob 存储大于4000字符的字符串
  2. JQuery Tab菜单的实现
  3. 免费阿里云服务器超爽体验(为阿里做个广告吧)
  4. linux中的NFS服务器配置及/etc/exports
  5. 一款小巧好用的MAC地址扫描器
  6. HBase-Shell-数据结构-原理
  7. SpringBoot之CommandLineRunner,预先加载系统数据
  8. List、Set、Map的区别
  9. 一个不可描述的python+mongodb爬虫项目
  10. 缓存Cookie、session、localStorage的区别