浅谈JavaScript代码预解析
栏目: JavaScript · 发布时间: 7年前
内容简介:最近与同学交流关于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源代码解析
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
ACM国际大学生程序设计竞赛
俞勇 编 / 2012-12 / 29.00元
《ACM国际大学生程序设计竞赛:知识与入门》适用于参加ACM国际大学生程序设计竞赛的本科生和研究生,对参加青少年信息学奥林匹克竞赛的中学生也很有指导价值。同时,作为程序设计、数据结构、算法等相关课程的拓展与提升,《ACM国际大学生程序设计竞赛:知识与入门》也是难得的教学辅助读物。一起来看看 《ACM国际大学生程序设计竞赛》 这本书的介绍吧!