JavaScript解析器在运行JavaScript代码的时候分为两步:预解析代码执行(按顺序从上到下)。

预解析:js引擎会把js里面所有的varfunction提升到当前作用域的最前面。

  • 预解析分为 变量预解析函数预解析

变量预解析(变量提升):把所有变量声明提升到当前作用域的最前面,不提升赋值操作。

函数预解析(函数提升):把所有函数声明提升到当前作用域的最前面,不调用函数

//函数提升,成功调用
fun();
function fun(){console.log(num);var num = 20;
}
  • 函数表达式的调用必须写在函数表达式的下面。

匿名函数存在 变量提升 不存在函数声明提升

//这种赋值形式的函数无法提升,var fun在这是定义变量的意思 只能提升var fun;
fun();
var fun = function(){console.log(22);
}

举例:

// 案例1
var num = 10;
fun();function fun(){console.log(num);var num = 20;
}
// 相当于执行了以下操作,从外到里进行提升
var num;function fun(){var num;//【局部变量和全局变量重名会覆盖全局变量】console.log(num); //输出undefined,这是函数里面的numnum = 20;
}
num = 10;
fun();
// 案例2
var a = b = c = 9
// 相当于 var a = 9; b = 9; c = 9;所以这里 b和c直接赋值,没有var声明——当作全局变量看
// 不同于集体声明 var a = 9, b = 9, c = 9;

【JavaScript】JS中的预解析相关推荐

  1. JavaScript中的预解析(变量提升)介绍!

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

  2. 江在川上曰:js中的JSON解析和序列化

    江在川上曰:js中的JSON解析和序列化 JSON解析和序列化 JSON是javascript的一个严格的子集,利用了javacript中的一些模式来表示结构化数据.他只是一种数据格式,并非一种编程语 ...

  3. 10JavaScript中的预解析

    技术交流QQ群:1027579432,欢迎你的加入! 1.预解析 JavaScript代码是由浏览器中的JavaScript解析器来执行的.JavaScript解析器在运行JavaScript代码的时 ...

  4. javascript之作用域与预解析

    js之预解析 在谈js的预解析之前,先看一段c++程序 #include <iostream> using namespace std;void useGreet(){greet(); } ...

  5. java script中定义的var变量怎么在body中使用,深入分析JavaScriptvar中的预解析与副作用...

    var的副作用 隐式全局变量和明确定义的全局变量间有些小的差异,就是通过delete操作符让变量未定义的能力. 通过var创建的全局变量(任何函数之外的程序中创建)是不能被删除的. 无var创建的隐式 ...

  6. JS中生成与解析JSON

    js中生成json对象 js中解析json字符串: 1.eval("..."): var a_id=eval('{"name":123}'); 如果eval中的 ...

  7. JS中生成和解析JSON

    1.JS中生成JSON对象的方法: var json = []; var row1 = {}; row1.id= "1"; row1.name = "jyy"; ...

  8. js中json字符串解析

    在开发过程中,经常会用到Json字符串,有时需要对前端传过来的json串解析,或者把前端数据以json字符串的形式传送给后端,下面我们来看一下各方面的应用. 1.JSON格式和JS格式 //JS对象 ...

  9. 实例讲解js中的预编译

    js作为一本脚本语言,可以不经过编译直接运行,但遇到预编译的问题,尤其是变量或函数同名时,这点知识就尤其必要了.为了更好地了解js语言背后的运行机理.笔者采用实例化的方式讲解我理解的预编译.    理 ...

最新文章

  1. BAT集体告别中台上半场!接下来,中台怎么玩?
  2. 几个常用的流量统计工具比较
  3. Postgresql的使用
  4. 【Python】青少年蓝桥杯_每日一题_9.11_买鸡
  5. 详解虚函数的实现过程之单继承(2)
  6. [BZOJ] 1084 [SCOI2005]最大子矩阵
  7. java replaceall 大小写_Java replaceAll不区分大小写
  8. 谋而后动:解读数仓计划生成中行数估算和路径生成的奥秘
  9. python信用评分卡_基于Python的信用评分卡模型分析(二)
  10. CodeForces-28C-Bath Queue-概率DP[ ICPC2016大连热身D]
  11. 远程主机强迫关闭了一个现有的连接
  12. CAD常见问题之创建一个新的键盘快捷方式
  13. 【青龙面板】天翼云盘签到
  14. android 4.4 按键分析三
  15. android textview基线,关于Textview基准线的计算
  16. scipy.sparse.vstack
  17. RevitAPI之标高和轴网(Level/Grid)
  18. jQuery 查找后代元素
  19. 微信红包限额提升方法
  20. C# Get和Post

热门文章

  1. Mac M1芯片处理器能用的Bridge 2020/2019 for mac 解决M1版MAC安装BR无法安装问题 完美支持M1芯片处理器
  2. 人脸检测之Ultra-Light-Fast-Generic-Face-Detector-1MB
  3. SEO人员,为什么要做流量过滤,如何操作?
  4. EndNote 高校_EndNote引文格式修改全攻略(一)——中英文混排问题
  5. JS基础学习--第一周
  6. 常用网络测试软件,常用的网络故障检测工具有哪些
  7. anime+tv+android,Anime TV Watch - KissAnime
  8. 3G杀手应用还是全方位轰炸?
  9. 有一个好的身体太重要了
  10. 浏览器查找文献\论文\资料\文档的小技巧