var a = 0;if(true){a = 1;function a(){};a = 21;console.log(a);}console.log(a);// 21 1

当前上下文代码执行之前,会将带var/function的进行声明/定义。

当遇到“{}”时,新版浏览器和老版浏览器的处理不一致。

老版浏览器(IE10以下)忽略“{}”的影响,继续声明/定义,不存在块级作用域

新版浏览器中“{}”里的function只声明不定义,“{}”若出现funciton/let/const关键字,会创建一个块级上下文


本题在全局变量提升阶段会声明一个变量a,在块级作用域内的function a同样会声明,但是不定义。 代码继续执行

    var a = 0;

在全局下给a赋值0。

    if(true){a = 1;function a(){};a = 21;console.log(a);}

代码执行到条件判断时,创建一个块级作用域,在块级作用域内进行变量提升,声明并且定义funciton a

        a = 1;

块级作用域内给a赋值为1。

继续执行到函数定义的地方为了兼容ES3和ES6浏览器会做这样一步操作:

把代码之前所有对a的操作映射到全局

于时之前对块级作用域内变量a赋值为1的操作也会映射到全局的变量a,所以全局的a变成了1。所以最后控制台打印的是结果是21,和1,因为全局的a映射了。

js变量提升_一道JS变量提升题相关推荐

  1. js define函数_聊聊JS模块化发展历程

    1 引言 如今,Javascript 模块化规范非常方便.自然,但这个新规范仅执行了2年,就在 4 年前,js 的模块化还停留在运行时支持,10 年前,通过后端模版定义.注释定义模块依赖.对经历过来的 ...

  2. java变量设置_配置环境变量

    1.安装完成后,右击"我的电脑",点击"属性",选择"高级系统设置": 2.选择"高级"选项卡,点击"环境变量 ...

  3. js知识点 掘金_掘金js

    js的基本类型有哪些?引用类型有哪些?null和undefined的区别. 如何判断一个变量是Array类型?如何判断一个变量是Number类型?(都不止一种) Object是引用类型嘛?引用类型和基 ...

  4. js增加属性_前端js基础2

    JavaScript ECMAScript(ES):规定了js的一些基础的核心知识(变量.数据类型.语法规范.操作语句等) 3/5==6/7 说出ES5和ES6的区别? DOM:document ob ...

  5. js禁用按钮_探索js让你的网页“自己开口说话”

    本文为作者行舟客投稿,原文地址为https://yunxiaomeng.blog.csdn.net/article/details/108672415 欢迎点赞! 背景 最近一直在研究音视频流,正好想 ...

  6. 简述js原型链_简述js

    简述js原型链 (在React 16.8.0之前)((before React 16.8.0)) Yeah, I know that there are terabytes of data avail ...

  7. js pug 代码_用JS写的windows95操作系统

    README.md 这是Windows95,在Electron应用程序中运行.是的,这是完整的. 它有用吗? 是的,可以.实际上,在macOS,Windows和Linux上.请记住,这完全是用Java ...

  8. js 时间比较_成都js聚合物弹性防水涂料生产厂家来电洽谈_鹏晨防水

    成都js聚合物弹性防水涂料生产厂家来电洽谈,I型属适用于屋面防水因为屋面24h温差大,基层易开裂.所以要用断裂伸长率高弹性好的适应基层开裂性的I型JS涂料,II型适用于卫生间车库地下室等长期有水浸泡水 ...

  9. js 字符串截取_【js】让你一次性搞清楚slice,substr,substring字符串截取函数

    假设 str是个字符串变量,且设置值为"LittleAnn",字符长度是9 那么这三个函数使用方式: var 相同点: start为开始位置下标,end为结束位置下标 下标从0开始 ...

最新文章

  1. 在android工程中,res目录下又有anim、drawable、layout、menu、raw、values和xml文件夹,分别用来保存?...
  2. Ubuntu 18.04下的Python和OpenCV的安装
  3. getpeername函数与getsockname函数的介绍
  4. 大数运算(6)——大数阶乘(求位数)
  5. 关于string.Template的简单介绍
  6. scikit-learn学习笔记(五)Logistic regression(逻辑回归)
  7. Permutation Partitions CodeForces - 1326C(组合数学+思维)
  8. TCP UDP HTTP 的关系和区别
  9. 解题:洛谷3402 可持久化并查集
  10. 中国水培营养素行业市场供需与战略研究报告
  11. 线程同步:喂,SHE
  12. unity cube自转的同时公转
  13. mysql definer super_技术分享 | 改写 mysqldump 解决 DEFINER 问题
  14. HeadFirstJava 1,2,3
  15. IT行业含金量较高的证书汇总
  16. 谈cntv.cn的启用
  17. 2022考研资料每日更新(2021.05.07)
  18. 蜀门 - 青城加点完美攻略
  19. 第12周 项目4-输出从顶点u到v的所有简单路径
  20. 马化腾说视频号是全公司希望

热门文章

  1. TCP/IP(一):数据链路层
  2. C语言——反弹球游戏(第二阶段
  3. A start job is running for Raise network interface(5min 13s )问题解决方法
  4. ThreadLocal可能引起的内存泄露
  5. (转)Shell中获取字符串长度的七种方法
  6. Java Virtual Machine
  7. 解析 Page.MaintainScrollPositionOnPostBack 属性
  8. Cisco 3550-EMI 交 换 机 配 置 教 程
  9. 共享两个做项目最常用功能操作的封装类
  10. vue --- vue-router