在进行web前端开发的时候,我们经常会遇到变量提升的情况,那么JS在解析变量的时候是如何做到提升的呢?今天小千就来带大家了解一下。

首先在JS中涉及两种作用域的问题,那么什么是作用域呢?

作用域是代码中所使用名字的作用范围,分为Script全局作用域和函数局部作用域。 当浏览器在解析网页内容时,会分别启动不同的解析器来解释代码的含义,如解析标签(超文本)的解析器、解析CSS样式的解析器,解析javascript脚本的解析器。且解析过程为同步(按顺序)解析。所以当浏览器解析到script标签时,会停止对html和css的解析,同时启动javascript的解析器。而在解析javascript的过程中我们主要关注解析器中的两个步骤:

1.预解析,即在当前作用范围中去寻找var、function、形参这三个内容。

如果找到var关键字、则提取var后面的名字放到当前作用域中,且默认给这个变量初始化一个值为undefined。

如果找到function关键字,则提取函数名放到当前作用域中,且将整个函数块赋值给函数名。

如果找到形参,则将形参名放到当前作用域中,且默认初始化为undefined。这个过程也称为变量提升。

2.逐行解读代码(即从上到下依次执行每一条语句)且分为两个步骤:执行表达式和函数调用。

当变量名与函数名相同时:

当有多个script标签时: - 多个script标签时,从上到下依次解析script作用域,所以建议将所有声明的语句放到第一个script中。

以上就是关于JS变量提升的介绍了,希望能帮到大家。最后欢迎对web前端开发感兴趣的同学关注小千,后期继续为大家分享更多web前端技术知识。

本文来自千锋教育,转载请注明出处。

JavaScript中变量提升是什么?如何实现?相关推荐

  1. JavaScript之变量提升

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

  2. JavaScript中变量判断是否是数字,判断是否是整数,判断是否是正整数/负整数,判断奇数/偶数的方法

    (1)判断是否是整数  JavaScript中变量判断是否是数字,判断是否是整数,判断是否是正整数/负整数,判断奇数/偶数的方法. (1)判断是否是整数 // 判断整数function isInteg ...

  3. 深圳软件测试培训:JavaScript中变量和作用域

    深圳软件测试培训:JavaScript中变量和作用域 JavaScript的变量与其他语言的变量有很大区别.JavaScript变量不是强制类型的,决定了它只是在特定时间用于保存特定值的一个名字而已. ...

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

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

  5. JavaScript:变量提升作用域

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

  6. JavaScript hoisting(变量提升)学习总结

    定义:函数声明和变量声明总是会被解释器悄悄地被"提升"到方法体的最顶部. JavaScript 中,变量可以在使用后声明,也就是变量可以先使用再声明. 例如一下两个例子: 例1: ...

  7. 检查JavaScript中变量是数字还是字符串

    有谁知道如何检查JavaScript中的变量是数字还是字符串? #1楼 如果要处理文字符号而不是构造函数,则可以使用typeof:. typeof "Hello World"; / ...

  8. javascript中变量

    全局变量和局部变量的区别和比较: 全局变量的作用域是全局的,在javascript中处处都可以定义:局部变量是局部的,作用域是局部性的. 全局作用域中编写代码时可以不使用var,但是局部变量必须使用v ...

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

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

最新文章

  1. Intel GPU实现游戏与数据中心
  2. Matlab与线性代数 -- 数组的乘法与除法
  3. 公司的电脑为什么卡——因为缺少工程师文化!
  4. 年终盘点篇:2018年开源市场5大发展趋势
  5. Python3 os模块应用
  6. openlayers基础系列教程(一)
  7. [新功能]删除团队文章
  8. jdba访问mysql_mysql连接出现问题记录
  9. 机器学习笔记(七)——决策树模型
  10. Python笔记-相关性分析(连续变量和分类变量)
  11. 图像处理(2)---图像处理的基本算法
  12. 如何用编程得出泰坦尼克号生还者的年龄段?
  13. 信息论基础(学习笔记整理)
  14. Web前端开发工具(编辑器)汇总
  15. 软件测试简历,这一点你是否漏掉
  16. office表格怎么冻结前两行_怎样冻结表格前两行(excel2003中怎么冻结行列标题)
  17. Android P 怎样屏蔽HOME键和RECENT键
  18. C#篇-值类型和引用类型
  19. 【Tinking in Java摘录笔记】第六章 初始化和清理
  20. PS改变icon图标颜色

热门文章

  1. AOGNet:基于深度 AND-OR 语法网络的目标识别方法 | PaperDaily #28
  2. python pip gpl_一文了解Python的pip工具
  3. Spring Boot-场景启动器
  4. spring原始注解开发-01
  5. 【安全系类之设计】应用安全相关
  6. Subsequences (easy version)
  7. CG CTF WEB Download~!
  8. Long Long Message
  9. npm安装vue 解决VUE无法打开图形界面工具,输入vue ui无反应 vue-cli版本2.9.6无法升级 npm uninstall vue-cli卸载时失败
  10. MyBatis-学习笔记01【01.Mybatis课程介绍及环境搭建】