{foo = 10function foo(){}
}
console.log(foo) // 10

1.针对该题要明白函数也会产生块级作用域

注意点:在最新的ECMA规范中为了兼容以前的代码,虽然函数产生了块级作用域,但在全局也是可以访问到的。

解答:代码在执行时会产生一个全局作用域,和一个块级作用域,并创建一个全局对象VE和VO,对象内是代码提升后的内容,如下图:

{function foo(){}foo = 10
}
console.log(foo)

抛开第一张图,单看上面这张图的时候,打印结果就会发生变化。可能有人会疑问它们提升后的代码是一样的,为什么执行结果就不一样了呢?

这个地方我个人觉得以后会在新的ECMA规范中进行改进,因为函数的处理太特殊了,有的博客说执行到该行(函数所在行)代码时,会把函数之前的操作映射给全局一份,我认为这个解释经不起推敲,因为函数是要进行作用域提升的,会提升到当前作用域的最上层,代码真正的执行顺序是和提升前不一致的。个人观点可能导致结果不一致的原因是V8内部在编译代码的时候对函数进行了特殊处理,会记录代码提升前的一个有关函数的状态,当代码执行完时这个有关函数的状态会被映射到全局,从而产生了不一样的结果。

javaScript作用域提升相关推荐

  1. JavaScript 作用域、变量提升

    JavaScript 作用域 JavaScript 作用域 JavaScript 局部作用域 JavaScript 全局变量 JavaScript 变量生命周期 函数参数 HTML 中的全局变量 ES ...

  2. 深入理解javascript作用域系列第四篇——块作用域

    前面的话 尽管函数作用域是最常见的作用域单元,也是现行大多数javascript最普遍的设计方法,但其他类型的作用域单元也是存在的,并且通过使用其他类型的作用域单元甚至可以实现维护起来更加优秀.简洁的 ...

  3. JavaScript 开发进阶:理解 JavaScript 作用域和作用域链(上)

    作用域是JavaScript最重要的概念之一,想要学好JavaScript就需要理解JavaScript作用域和作用域链的工作原理.今天这篇文章对JavaScript作用域和作用域链作简单的介绍,希望 ...

  4. 浅谈JavaScript作用域,关于Java的学习路线资料

    javascript是目前web领域中使用非常广泛的语言,不管是在前端还是在后端都能看到它的影子,可以说web从业者不论怎样都绕不开它.在前端领域,各种框架层出不穷.在后端领域,nodejs可谓如火如 ...

  5. 五个小例子教你搞懂 JavaScript 作用域问题

    原文:五个小例子教你搞懂 JavaScript 作用域问题 众所周知,JavaScript 的作用域和其他传统语言(类C)差别比较大,掌握并熟练运用JavaScript 的作用域知识,不仅有利于我们阅 ...

  6. JavaScript 学习提升

    javascript 技能提升 理解闭包 闭包,官方对闭包的解释是:一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分.闭包的特点:1. 作为一个函数变 ...

  7. JavaScript 变量提升

    JavaScript 变量提升 JavaScript 中,函数及变量的声明都将被提升到函数的最顶部. JavaScript 中,变量可以在使用后声明,也就是变量可以先使用再声明. 这几天在刷题的过程中 ...

  8. JavaScript(三)—— JavaScript 函数/JavaScript 作用域/JavaScript 预解析/JavaScript 对象

    本篇为 JavaScript 系列笔记第三篇,将陆续更新 JavaScript(一)-- 初识JavaScript/注释/输入输出语句/变量/数据类型 JavaScript(二)-- JavaScri ...

  9. JavaScript变量提升

    JavaScript变量提升 在JavaScript中变量声明与函数声明都会被提升到作用域顶部,优先级依次为: 函数声明 变量声明 变量赋值. 变量提升 var的变量提升 console.log(a) ...

最新文章

  1. 【转】WinForm窗体间数据交互的方法
  2. antd 上传进度_antd vue upload组件使用customRequest上传文件显示文件上传进度
  3. 【特征工程】(未完成)编码
  4. 机器学习之单变量线性回归(Linear Regression with One Variable)
  5. MySQL事务的不可重复读
  6. Mysql之一:mysqldump和LVM逻辑卷快照
  7. LINUX CP 命令强制覆盖功能开启/关闭
  8. 绘制五彩泡泡python_五彩泡泡教案
  9. 这就是数据分析之数据变换
  10. Java5、Java6、Java7的新特性
  11. 中缀表达式转后缀表达式(Java)
  12. 网络电视测试软件,「图」电视直播源有效性检测软件 m3u8 IPTV checker_高清时代论坛...
  13. Dreammail 下载与安装
  14. OpenCV中出现“Microsoft C++ 异常: cv::Exception,位于内存位置 0x0000005C8ECFFA80 处。”的异常...
  15. CSS之颜色和背景的属性设置
  16. 解密为何 Golang 能从众多语言中脱颖而出
  17. iPhone2018年最全iPhone尺寸
  18. 网页学习小技巧哈哈哈
  19. vite 设置启动Network 为本地ip
  20. 微风:UI设计需要学习哪些软件?

热门文章

  1. 想起大学线代符教授的一句话:解决问题的方法的多种多样的
  2. 李开复给中国大学生的第一封信
  3. 纳什博弈论的原理与应用--北京晚报
  4. 公司员工 经验——少说话,多做事
  5. 第一行代码android的读后感,《第一行代码》读书笔记
  6. android 蓝牙键盘驱动安装失败,Android系统使用蓝牙键盘的问题
  7. 读书八字诀:怎样将书读得通透?
  8. cf982C(dfs)
  9. JavaScript遍历数组、Map
  10. 09_方法重写丶多态丶抽象类