定义:函数声明和变量声明总是会被解释器悄悄地被"提升"到方法体的最顶部。

JavaScript 中,变量可以在使用后声明,也就是变量可以先使用再声明。

例如一下两个例子:

例1:

x = 5; // 变量 x 设置为 5elem = document.getElementById("demo"); // 查找元素
elem.innerHTML = x;                     // 在元素中显示 xvar x; // 声明 x

例2:

var x; // 声明 x
x = 5; // 变量 x 设置为 5elem = document.getElementById("demo"); // 查找元素
elem.innerHTML = x;                     // 在元素中显示 x

他们的结果都是一样的,都是demo的内容都是5。

但是,JavaScript在初始化时却是不会提升的,也就是说只有在只声明,不初始化的前提下才能得到提升。如下两例子:

例1:

<p id="demo"></p>
<script>
var x = 5; // 初始化 x
var y = 7; // 初始化 y
elem = document.getElementById("demo"); // 查找元素
elem.innerHTML = x + " " + y;           // 显示 x 和 y
</script>

输出:

5  7

例2:

var x = 5; // 初始化 xelem = document.getElementById("demo"); // 查找元素
elem.innerHTML = x + " " + y;           // 显示 x 和 yvar y = 7; // 初始化 y

输出:

5  undefined

其实主要理解 js 的解析机制就行。

遇到 script 标签的话 js 就进行预解析,将变量 var 和 function 声明提升,但不会执行 function,然后就进入上下文执行,上下文执行还是执行预解析同样操作,直到没有 var 和function,就开始执行上下文。如:

a=5;
show();
var a;
function show(){};

预解析:

var a;
function show(){};
a=5;
show();

提醒:在头部声明你的变量

对于大多数程序员来说并不知道 JavaScript 变量提升。

如果程序员不能很好的理解变量提升,他们写的程序就容易出现一些问题。

为了避免这些问题,通常我们在每个作用域开始前声明这些变量,这也是正常的 JavaScript 解析步骤,易于我们理解。

JavaScript hoisting(变量提升)学习总结相关推荐

  1. 浅聊JavaScript中的Hoisting(变量提升)

    一直有写博客的想法但因为懒惰等各种情况没有付出实际行动,择日不如撞日,那就今天让我给大家简单归纳总结一下JavaScript中的Hoisting(变量提升)吧! 1.对于变量 //variablesc ...

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

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

  3. JavaScript之变量提升

    1.什么是变量提升(Hoisting)? Javascript中执行上下文 (特别是创建和执行阶段)工作方式的一种认识,在ES6之前是找不到变量提升这个词的 "变量提升"意味着变量 ...

  4. JavaScript中变量提升是什么?如何实现?

    在进行web前端开发的时候,我们经常会遇到变量提升的情况,那么JS在解析变量的时候是如何做到提升的呢?今天小千就来带大家了解一下. 首先在JS中涉及两种作用域的问题,那么什么是作用域呢? 作用域是代码 ...

  5. JavaScript:变量提升作用域

    作用域是JavaScript中听上去感觉很简单,其实比较麻烦的一个特性,什么是作用域?我看书籍有一个相对的官方解释:作用域(scope,或译有效范围)就是变量和函数的可访问范围,即作用域控制着变量和函 ...

  6. JavaScript的变量提升

    变量提升的表现是,无论在函数中何处位置声明的变量,好像都被提升到了函数的首部,可以在变量声明前访问到而不会报错.简单来说就是通过解析和预编译为代码的函数变量创建上下文环境,使得变量在生命前就可以访问. ...

  7. php变量 声明提升,JavaScript 变量提升

    JavaScript 变量提升 JavaScript 中,函数及变量的声明都将被提升到函数的最顶部. JavaScript 中,变量可以在使用后声明,也就是变量可以先使用再声明. 以下两个实例将获得相 ...

  8. JavaScript 作用域、变量提升

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

  9. javaScript变量提升以及函数提升

    变量的声明赋值 var a = 1; 上面的代码先声明变量 a,然后在变量 a 与数值 1 之间建立引用关系,称为将数值 1 "赋值"给变量 a.以后,引用变量名 a 就会得到数值 ...

最新文章

  1. 专治“炼丹侠”各种不服:1分钟就能搞个AI应用 | 最新开源深度学习框架工具套件TinyMS问世...
  2. 香帅的北大金融学课笔记19 -- 科技金融
  3. 超简单让.NET Core开发者快速拥有CI/CD的能力-Docker版本
  4. centos mysql 同步时间_centos:mysql主从同步配置(2018)
  5. Sql Server之旅——第十二站 sqltext的参数化处理
  6. 来点实在的 Community Server 2007 剥离出的模式窗口
  7. mybaitis List入参
  8. 在线JSON校验格式化工具(Be JSON)
  9. Python 项目打包各种依赖包
  10. TkMybatis 是什么?
  11. VMware搭建KMS服务器(VLMCSD)
  12. iOS7 与 iOS8上 uisegementcontrol 设置image不显示问题
  13. outlook 2016 添加126邮箱教程
  14. MaxCompute创建TableStore外表
  15. 第十一周助教工作总结——NWNU李泓毅
  16. MySQL字符集是什么
  17. MindSpore新工具TinyMS体验
  18. c语言计时纳秒_如何利用rdtsc计算纳秒级的时间
  19. webrtc bbr
  20. uniapp无法打开相机权限

热门文章

  1. 刚才同意了一个JetBrains 反编译器对话框,然后代码debug 的时候就会出现许多这些黄色的底层结构, 有没有大神直到这个怎么取消呀
  2. 用java梯形法求定积分,用梯形法求定积分
  3. Python爬虫第4课 正则表达式基础
  4. (LeetCode)下一个排列
  5. Deep contextualized word representations
  6. 全网最稀缺的安卓工具资源APPMT管理+NP管理+云注入+云注入入口解密工具+Apk单机弹窗注入+小黄鸟+黑盒(32位)+黑盒(64位)+算法助手+mhook等等……
  7. 深度学习应用系列——计算机视觉:表面缺陷检测(一)
  8. 台达PLC ES与欧姆龙E5CC温控器485通讯程序带注释,并附送昆仑通态和威纶通触摸屏程序,有接线方式,设置
  9. 如何转载别人优秀的博客----一定要标注原创出处
  10. 美图App的移动端DNS优化实践:HTTPS请求耗时减小近半