浅谈JavaScript代码预解析
栏目: JavaScript · 发布时间: 5年前
内容简介:最近与同学交流关于js代码预解析的问题,想想自己当时学的时候也没有太过注意这个事,所以特意研究了一下,如有不正确的地方敬请各位指教。为了便于理解,文中部分用可能不够准确,请大家多包涵。
最近与同学交流关于js代码预解析的问题,想想自己当时学的时候也没有太过注意这个事,所以特意研究了一下,如有不正确的地方敬请各位指教。为了便于理解,文中部分用可能不够准确,请大家多包涵。
知识点
-
var
声明的变量在预解析的时候只执行声明,不会执行定义,默认值是undefined
。 -
function
声明的函数在预解析的时候会提前声明并且会同时定义。 - 变量名重复声明无效
- 预解析过得代码不会再执行阶段执行
示例一
console.log(a); // 打印函数a函数体(function a() { console.log('a') }) var a = 10; console.log(a); // 10 function a() { console.log('a') } console.log(a); // 10 复制代码
预解析过程
-
首先预解析到有变量
a
存在,因此记录下a
这个名字,和其值undefined
-
接着预解析到有函数
a
声明,记录下函数名a
-
但是发现已经记录了一个
a
,因此该操作无效,将函数体与a
这个名字相关联 - 解析完毕
预解析过程代码
a = undefined a = function () { console.log('a') }
预解析结果
-
a = function () { console.log('a') }
执行过程
-
打印变量
a
的值function a() { console.log('a') }
-
变量
a
赋值为10,将原来关联的函数覆盖 -
打印变量
a
的值10
-
打印变量
a
的值10
- 执行完毕
执行过程代码
console.log(a) a = 10 console.log(a) console.log(a)
示例二
console.log(fn) // 函数fn函数体(function fn() { console.log(2) }) function fn() { console.log(1) } console.log(fn) // 函数fn函数体(function fn() { console.log(2) }) var fn = 10 console.log(fn) // 10 function fn() { console.log(2) } console.log(fn) // 10 复制代码
预解析过程
-
首先预解析到有函数
fn
声明,因此记录fn
这个名字,并关联其函数体 -
接着预解析到变量
fn
声明,记录下变量名fn
-
但是发现已经记录了一个
fn
,因此该操作无效 -
接着预解析到有函数
fn
声明,因此记录fn
这个名字 -
但是发现已经记录了一个
fn
,因此该操作无效,接着关联其函数体 - 解析完毕
预解析过程代码
fn = function () { console.log(1) } fn = function () { console.log(2) }
预解析结果
-
fn = function () { console.log(2) }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- PostgreSQL 字符编码相关代码解析
- PostgreSQL 环境变量相关代码解析
- Istio Pilot 代码深度解析
- Istio 服务注册插件机制代码解析
- Istio 服务注册插件机制代码解析
- ThreeJS的DeviceOrientationControls源代码解析
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。