大佬们好,我是江湖不渡i,专业切图仔。🦞
看了目录可能大佬们会觉得我写都是一些老生常谈的问题,基本上面试题汇总的文章都有。其实不是这样的,我并没有写一些大家都知道的东西,那些东西掘金上大佬们已经总结的很详细了。下面的内容都是在一些常见问题换一个角度来写的分析,比如说这个知识依赖于另外什么样一个知识,还有就是可能有些意外的可能平常我们自己回顾的时候想不到的点。我相信总会有那么一两个是你之前没曾想到过的,如果真的有帮助到哪位,希望大佬点个赞,哈哈。⚽️⚽️🌶️
“我自己是一名从事了6年web前端开发的老程序员,今年年初我花了一个月整理了一份最适合2021年自学的web前端全套培训教程(视频+源码+笔记+项目实战),从最基础的HTML+CSS+JS到移动端HTML5以及各种框架和新技术都有整理,打包给每一位前端小伙伴,这里是前端学习者聚集地,欢迎初学和进阶中的小伙伴(所有前端教程关注我的微信公众号:web前端学习圈,关注后回复“web”即可领取
变量声明
三个关键字:var、let、const
Tipes: var在所有ECMAScript版本都能使用,let、const只能在ECMAScript6和以后的版本使用。
提问环节:
❓❓❓三个关键字有啥区别
-
var声明的范围是函数作用域,let、const声明的是块级作用域。
-
var声明变量会提升到函数作用域顶部,let、const因为暂时性死区所以不会发生变量提升。
-
var可以重复声明覆盖自己声明过的变量但是不能重复声明覆盖let、const声明的变量,let、const不连自己声明过的变量都不能重复声明覆盖。
-
var、let声明的时候可以不赋初始值并且可以随时修改,const声明的时候必须初始化,而且不能修改。(引用数据类型不能修改指针,可以修改内容)
-
全局声明的时候,var声明变量挂在在window对象,let、const因为ES6中,全局对象的属性和全局变量脱钩,所以没有在window上在对应的块级作用域的活动对象上。
-
let、const相比var,在块级作用域比函数作用域更早终止的情况下有助于垃圾回收提升性能。
❓❓❓什么是块级作用域?
对应的还有全局作用域,函数作用域。块级作用域由ES6新增,一对{}包裹的就是块级作用域,块级作用域要配合let、const使用,对于var来说是没有块级作用域的。
❓❓❓为什么要引入块级作用域?
为了解决var声明变量具有变量提升特性的缺陷。
❓❓❓变量提升是怎么造成的?
因为JS引擎并非一行一行地分析和执行程序,而是一段一段地分析执行。当执行一段代码的时候,会进行一个“准备工作”,js在执行上下文的时候,会进行两个阶段&#x