浅谈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源代码解析
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
PERL學習手札.
簡信昌 / 上奇科技 / 20040816 / NT$ 390
1. 關於Perl 當你翻開這本書的時候,你也就進入了一個奇幻的世界。Perl確實是一種非常吸引人的程式語言,而之所以這麼引人入勝的原因不單單在於他的功能,也在於他寫作的方式,或說成為一種程式寫作的藝術。即使你只是每天埋首於程式寫作的程式設計師,也不再讓生活過份單調,至少你可以嘗試在程式碼中多一些變化。而且許多Perl的程式設計師已經這麼作了,這也是Perl的理念-「There is mor......一起来看看 《PERL學習手札.》 这本书的介绍吧!
随机密码生成器
多种字符组合密码
Base64 编码/解码
Base64 编码/解码