前端进阶之 let、const、var
- 作者:陈大鱼头
- 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()
复制代码
首先在全局作用域下使用 let
和 const
声明变量,变量并不会被挂载到 window
上,这一点就和 var
声明有了区别。
再者当我们在声明 a
之前如果使用了 a
,就会出现报错的情况。
首先报错的原因是因为存在暂时性死区,我们不能在声明前就使用变量,这也是 let
和 const
优于 var
的一点。然后这里你认为的提升和 var
的提升是有区别的,虽然变量在编译的环节中被告知在这块作用域中可以访问,但是访问是受限制的。
let、const、var 创建的不同
let
和 const
声明定义了作用于 正在运行的执行上下文(running execution context) 的 词法环境(LexicalEnvironment) 的变量。
let
和 const
声明的变量是在词法环境实例化时创建的,但是给变量赋值的原生功能 LexicalBinding
以及变量初始化的功能 Initializer
是在之后执行的,而不是在创建变量时,所以在执行之前无法以任何方式访问它们,这就是 暂时性死区。
var语句声明了作用于 正在运行的执行上下文(running execution context) 的 变量环境(VariableEnvironment) 的变量。
var
声明的变量同样是在词法环境实例化时创建的,并且创建时就赋值有 undefined
,在任何的 变量环境(VariableEnvironment)中,var
变量 的绑定可以出现多个,但是最终值是由 赋值时确定的,而不是创建变量时。
词法环境(LexicalEnvironment)与变量环境(VariableEnvironment)
- 词法环境(LexicalEnvironment):简单来说就是 ECMASCRIPT 中的书写语法的上下文语法环境。
- 变量环境(VariableEnvironment):简单来说就是 执行上下文 中专门存储变量跟该变量赋值的一个对象。
总结:let
const
跟 var
不同的原因是 let
const
的创建是基于词法环境,而 var
是基于变量环境。。用通俗的话来说就是,不是同一个系统的...
如果你、喜欢探讨技术,或者对本文有任何的意见或建议,你可以扫描下方二维码,关注微信公众号“鱼头的Web海洋”,随时与鱼头互动。欢迎!衷心希望可以遇见你。
前端进阶之 let、const、var相关推荐
- 银行前端面试高频基础问题——var、let和const到底有哪些区别?讲不清楚当场发感谢信!?
银行前端面试高频基础问题--var.let和const到底有哪些区别?讲不清楚当场发感谢信!? 面试官:知道const.let和var吧,说说他们的区别吧 我:- - 前言 可以说这是银行我们面试遇到 ...
- 大前端进阶!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. ...
- LEARN_前端进阶_深浅拷贝原理
详细解析赋值.浅拷贝和深拷贝的区别 赋值(Copy) 赋值是将某一数组或对象赋给某个变量的过程,分类下面 2 部分: 基本数据类型:赋值,赋值之后两个变量互不影响 引用数据类型:赋址,两个变量具有相同 ...
- 2021年高级前端进阶之路
YYDS 2021年高级前端进阶之路1.两边固定,中间自适应布局(1.用flex;2.用display:left;3.用相对定位和绝对定位结合)2.js判断字符串中出现次数最多的字符(1.用for循环 ...
- 3万6千字爆肝,前端进阶不得不了解的函数式编程开发,含大量实例,手写案例,所有案例均可运行
3w6爆肝,前端进阶不得不了解的函数式编程开发,含大量实例,手写案例,所有案例均可运行 认识函数式编程 函数相关复习 函数是一等公民 高级函数 函数作为参数 案例 1,模拟 forEach 案例 2, ...
- fifo算法_前端进阶算法6:一看就懂的队列及配套算法题
引言 队列这种数据结构,据瓶子君了解,前端需要了解的队列结构主要有:双端队列.滑动窗口,它们都是算法中是比较常用的数据结构. 因此,本节主要内容为: 数据结构:队列(Queue) 双端队列(Deque ...
- IT:前端进阶技术路线图(初级→中级→高级)之初级(研发工具/HTML/CSS/JS/浏览器)/中级(研发链路/工程化/库/框架/性能优化/工作原理)/高级(搭建/中后台/体验管理等)之详细攻略
IT:前端进阶技术路线图(初级→中级→高级)之初级(研发工具/HTML/CSS/JS/浏览器)/中级(研发链路/工程化/库/框架/性能优化/工作原理)/高级(搭建/Node/IDE/中后台/体验管理/ ...
- 【2019 前端进阶之路】深入 Vue 响应式原理,活捉一个 MVVM
作者:江三疯,专注前端开发.欢迎关注公众号前端发动机,第一时间获得作者文章推送,还有各类前端优质文章,致力于成为推动前端成长的引擎. 前言 作为 Vue 面试中的必考题之一,Vue 的响应式原理,想必 ...
- 前端进阶之路: 前端架构设计(2)-流程核心
可能很多人和我一样, 首次听到"前端架构"这个词, 第一反应是: "前端还有架构这一说呢?" 在后端开发领域, 系统规划和可扩展性非常关键, 因此架构师备受重视 ...
- 前端进阶必备技能:Vue中如何定制动画效果
作为前端程序员,前端火起来的短短几年里技术更新迭代特别快,不仅是新的框架繁多,Vue,React,Angular轮番上场,各种工具,插件,库也是琳琅满目,就连基础的JavaScript语法的更新也是年 ...
最新文章
- 比尔盖茨聘请投资高手,26年亏掉4300亿美金!
- (总结)CentOS 6.x使用yum快速安装Apache+PHP+Tomcat(JSP)+MySQL
- 人脸识别损失函数笔记
- 分享Java面试中的几个重要基础问题
- 高德地图 amap 设置鼠标样式
- python 函数可以作为容器对象的元素_python基础(十四):函数对象与闭包
- 详解Python中genfromtxt的用法(numpy)
- 面向对象 —— 类设计(九) —— 类设计的内在一致性
- 艾默生变频器报警PHP,艾默生/Emerson变频器启动就报警维修很牛
- python正则表达式代码_python正则表达式实例代码
- java外文书籍下载_Web开发经典技术图书(英文版居多),欢迎下载阅读 - 程序语言 - 小木虫 - 学术 科研 互动社区...
- Sql Server 2008 配置服务器,并让客户端连接
- gtx1050ti安装win10和ubuntu16.04双系统
- 《GAMES104-现代游戏引擎:从入门到实践》-04 学习笔记
- 计算机主机启动不了系统安装系统安装软件,电脑主机启动不了怎么办
- 微信公众号都有哪些营销技巧
- 史上最全的Simplis安装教程
- 公司企业邮箱怎么选择?买企业邮箱要考虑什么?
- IT英文原版书籍专业词汇积累
- java 牛生小牛_牛生小牛的递归算法