浅谈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) }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
我用微软改变世界
保罗·艾伦 / 吴果锦 / 浙江人民出版社 / 2012-3 / 46.00元
《我用微软改变世界(微软联合创始人保罗•艾伦回忆录)》内容简介:1975年,两个从大学退学的男孩夜以继日地设计一款软件。其中一个男孩就是后来的世界首富比尔盖茨,而另外一个则作为盖茨背后的男人,一直生活在盖茨的阴影里,其实,他的人生经历远比盖茨更为传奇和丰富。 16岁,与比尔盖茨在顶级名校湖畔中学相遇,成为最佳拍档,无数趣事,无数闹腾,高呼“处男万岁”还不够,还得意扬扬把这话刻在碑上留给学弟们......一起来看看 《我用微软改变世界》 这本书的介绍吧!