<script type="text/javascript">var a = 456;(function() {console.log(a)let a=123})()</script>

如果let没有变量提升的话输出的应该是456

但是如果你执行代码的话会报错Uncaught ReferenceError: a is not defined

但是现在不会报这个错他会报 Cannot access 'a' before initialization 初始化前无法访问“a”

之所以会报不一样的错误是因为浏览器版本不同

想不到吧!从这里其实可以看出let存不存在变量提升有争议了,值在变量显式赋值之前不能对变量进行读写,否则就会报错,这也就是所谓的let和const的暂时性死区

暂存死区

与通过  var 声明的有初始化值 undefined 的变量不同,通过 let 声明的变量直到它们的定义被执行时才初始化。在变量初始化前访问该变量会导致 ReferenceError。该变量处在一个自块顶部到初始化处理的“暂存死区”中。

看过很多文章后用大佬的话做下总结

①let有无变量提升取决于你如何定义变量提升。

②若[变量提升」是指变量可在声明语句之前被调用,则let没有变量提升;若[变量提升」是指变量在声明语句之前就被执行上下文记住,则let有变量提升。

③JS代码是即时编译与执行的,一个函数作用域会拥有一个执行上下文,执行上下文是一块存储空间。执行上下文内又有一个名为[变量环境」和「词法环境」的东西。

④由var和function声明的变量,在代码编译完成后,执行之前,其变量名和值就被存储在变量环境中了,所以在代码执行阶段的任何时刻,都可以调用它们,自然也能在声明语句之前调用了。

⑤由const和let声明的变量,在代码编译完成后、执行之前,其变量名被存储在词法环境中,代码执行过程中会从依据[词法环境→变量环境→闭包/上一个作用域」的顺序来查找变量,而词法环境所存储的值被要求只有在声明语句之后才能调用。所以会存在暂时性死区,但变量又确确实实被执行上下文提前记住了,所以可以把暂时性死区理解为「变量暂时不能使用的阶段」。所以得出结论①

let 到底有无变量提升相关推荐

  1. 关于JS中变量提升的规则和原理的一点理解(一)

        关于变量提升,以前在一些教程和书籍上都听到过,平时开发中也知道有这个规律,但是今天突然在一个公开课中听到时,第一反应时一脸懵逼,然后一百度,瞬间觉得好熟悉啊,差点被这个概念给唬住了,不信我给你 ...

  2. js 变量、函数重复声明和变量提升浅析

    第一阶段:看山是山,看水是水 先从简单的例子开始 // 示例1 var a = 1 console.log(a) // 1 var a = 2 console.log(a) // 2 通过两个var声 ...

  3. JS中的变量提升总结

    1.JS代码执行顺序 我们直觉上会认为JS的代码在执行时是由上到下一行一行执行的,但实际并不完全正确,下面的例子会证明: a = 'haha' var a console.log(a) 上面的代码会输 ...

  4. 【总结】关于js变量提升

    直接上代码例子1: console.log(a); 输出结果是 报错. 再看例子2: console.log(a); var a = 1; 输出结果是 undefined 其实例2等同于如下例3: v ...

  5. JavaScript 中的 Hoisting (变量提升和函数声明提升)

    如何将 函数声明 / 变量 "移动" 到作用域的顶部. 术语 Hoisting(提升) 在很多 JavaScript 博文中被用来解释标识符的解析.其实 Hoisting(提升) ...

  6. js 变量提升 和函数提升

    2019独角兽企业重金招聘Python工程师标准>>> 创建函数有两种形式,一种是函数声明,另外一种是函数字面量,只有函数声明才有变量提升 console.log(a) // f a ...

  7. 【Web前端培训】预解析(变量提升)

    今天千锋小编为大家介绍一下一下JavaScript中的预解析(变量提升).从什么是预解析及变量的预解析和函数的预解析及加载流程进行学习(注意:我们这里说的ES5中的预解析). 什么是解析 首先代码执行 ...

  8. js基础面试高频面点1:变量提升

    一.什么是变量提升?var变量提升的底层原理是什么? 变量提升的定义:所有变量的声明语句都会被提升到代码头部,这就是变量提升. 原理:引擎在读取js代码的过程中,分为两步,专业来说代码运行是分为预处理 ...

  9. Javascript中函数提升和变量提升

    词法分析 词法分析方法: js运行前有一个类似编译的过程即词法分析,词法分析主要有三个步骤: 分析参数 再分析变量的声明 分析函数说明 具体步骤如下: 函数在运行的瞬间,生成一个活动对象(Active ...

最新文章

  1. 机器学习中的数学基础:(1)实际应用中矩阵特征值与特征向量的几何意义
  2. Java项目代码结构
  3. struts2学生信息管理系统篇章③
  4. 什么样的女生适合学计算机?
  5. H5工程师跨页面取值的几种方法
  6. 三星 原生android,原生Android 4.0 三星GALAXY Nexus评测
  7. android q全局夜间模式,安卓Q新功能全局夜间模式,网友:都9102年了,魅族Flyme早就有...
  8. 粒子群PSO算法实验及其代码解释
  9. 软件基本功:测试听着简单,会做的没几个
  10. 实现模拟内存动态分区分配算法_你还在为了JVM而烦恼么?(内存结构和垃圾回收算法)...
  11. 图书管理系统c语言报告调试分析,图书管理系统C语言程序设计实验分析报告.doc...
  12. 为什么要分库分表?用过哪些分库分表中间件?不同的分库分表中间件都有什么优点和缺点?...
  13. 求最小公倍数的两种算法(最大公约数的三种算法)
  14. pyttsx3 快速上手之:语音合成播报
  15. java循环控制语句,简述Java流程控制语句中的三种循环控制语句,并描述下它们的区别。...
  16. 淘淘商城---8.9
  17. Artificial Fingerprinting for Generative Models: Rooting Deepfake Attribution in Training Data(主动防御)
  18. NBA2010JAVA安卓中文版_nba2010下载
  19. Pooling Revisited: Your Receptive Field is Suboptimal 论文解读和感想
  20. WLAN与WiFi各是什么意思有什么区别

热门文章

  1. linux memcpy需要头文件,Linux编程中中各种头文件
  2. Http请求参数详解
  3. 阳光动力2号太阳能飞机平安飞抵南京
  4. openstack中关于报错AMQP5672拒绝连接问题
  5. 计算机软件及其使用的ppt,计算机软件及其使用ppt课件.ppt
  6. python中list是有序的吗_python list有序吗
  7. 怎么用matlab读一张图像,利用matlab读取图像
  8. 量子计算机意识永生,将人类意识上传计算机,能够实现“永生”?看看科学家怎么说...
  9. Akka 入门 实战
  10. 实习了两个月了,说说感悟吧..